我希望使用子进程从python中调用 sed 。我尝试使用的脚本如下。但是,这会将sed输出传输到标准终端。似乎是'>'我的subprocess.call语句中无法识别运算符。有什么建议?
import sys
import os
import subprocess
files = os.listdir(sys.argv[1])
count = 0
for f in files:
count += 1
inp = sys.argv[1] + f
outp = '../' + str(count) + '.txt'
sub = subprocess.call(['sed', 's/\"//g', inp, '>', outp])
另外 - 我的文件名中有空格,即“file1 .txt”。这可能是问题吗?当我从终端调用sed时,我的sed命令工作正常,而不是从脚本调用。
感谢。
答案 0 :(得分:13)
使用
out_file = open(outp, "w")
sub = subprocess.call(['sed', 's/\"//g', inp], stdout=out_file )
答案 1 :(得分:6)
跳过运行所有sed进程并在Python中完成工作会快得多
import os
import sys
files = os.listdir(sys.argv[1])
for count, f in enumerate(files):
with open( os.path.join(sys.argv[1],f), "r" ) as source:
with open( os.path.join('..',str(count)+'.txt'), "w" ) as target:
data= source.read()
changed= source.replace('"','')
target.write( changed )
这将运行得相当快,因为它不会分叉很多子进程。