Python - 使用子进程调用sed?

Dar*_*ick 10 python subprocess sed

我希望使用subprocess从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])
Run Code Online (Sandbox Code Playgroud)

另外 - 我的文件名中有空格,即"file1 .txt".这可能是问题吗?当我从终端调用sed时,我的sed命令工作正常,而不是从脚本调用.

谢谢.

Nix*_*Nix 13

使用

out_file = open(outp, "w")
sub = subprocess.call(['sed', 's/\"//g', inp], stdout=out_file )
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 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 )
Run Code Online (Sandbox Code Playgroud)

这将运行得相当快,因为​​它不会分叉很多子进程.

  • 我认为它应该是`changed = data.replace(''','')`而不是. (4认同)