Python - используя подпроцесс для вызова sed? - PullRequest
10 голосов
/ 15 июля 2011

Я хочу вызвать sed из python, используя подпроцесс.Сценарий, который я попытался использовать, приведен ниже.однако, это передает вывод 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 из терминала, но не из сценария.

Спасибо.

Ответы [ 2 ]

13 голосов
/ 15 июля 2011

Используйте

out_file = open(outp, "w")
sub = subprocess.call(['sed', 's/\"//g', inp], stdout=out_file )
6 голосов
/ 15 июля 2011

Было бы намного быстрее пропустить запуск всех процессов 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 )

Это будет выполняться значительно быстрее, поскольку не будет обрабатывать много подпроцессов.

...