Skip to main content
 首页 » 编程设计

python之更多 子进程调用 Python 中的运算符

2025年05月04日79think

我有三个 csv 文件:1.csv、2.csv、3.csv,如下所示:

➜  ~  cat 1.csv  
1,1,1,1,1,1 
➜  ~  cat 2.csv  
2,2,2,2,2,2 
➜  ~  cat 3.csv  
3,3,3,3,3,3 

如果我这样做:

➜  ~  cat < 1.csv < 2.csv < 3.csv > 4.csv 

我得到:

➜  ~  cat 4.csv  
1,1,1,1,1,1 
2,2,2,2,2,2 
3,3,3,3,3,3 

如我所愿。

现在我想在 Python subprocess.call 中执行此操作

import subprocess as sp 
 
sp.call('cat < 1.csv < 2.csv < 3.csv > 4.csv', shell=True) 

但结果是:

➜  ~  cat 4.csv  
3,3,3,3,3,3 

在这些方式中它不会创建 4.csv 文件:

sp.call(['cat', '<', '1.csv', '<', '2.csv', '<', '3.csv', '>', '4.csv'], stdout=sp.PIPE,stderr=sp.PIPE 

或者

mylist = ['cat', '<', '1.csv', '<', '2.csv', '<', '3.csv', '>', '4.csv'] 
sp.call(mylist, stdout=sp.PIPE,stderr=sp.PIPE) 

请您参考如下方法:

这可以使用 python 轻松实现:

import fileinput 
with open("4.csv", "a") as out: 
    for f in fileinput.input(["1.csv","2.csv","3.csv"]): 
        out.write(f) 

使用子流程你可以重定向:

from subprocess import check_call 
with open("4.csv", "a") as out: 
     check_call(["cat", "1.csv", "2.csv", "3.csv"],stdout=out) 

我建议使用第一个示例。