2011-07-15 35 views
8

Tôi muốn gọi sed từ python bằng cách sử dụng tiến trình con. Kịch bản tôi đã thử sử dụng là dưới đây. tuy nhiên, ống này dẫn đầu ra của sed tới đầu cuối tiêu chuẩn. Dường như toán tử '>' không được nhận ra từ bên trong câu lệnh subprocess.call của tôi. Bất kỳ đề xuất?Python - sử dụng tiến trình con để gọi sed?

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]) 

Ngoài ra - tên tệp của tôi có khoảng trắng, ví dụ: "file1 .txt". Đây có phải là vấn đề không? Lệnh sed của tôi hoạt động tốt khi tôi gọi sed từ terminal, không phải từ script.

Cảm ơn.

+3

Bất kỳ lý do nào để không thực hiện việc này bằng chính Python? – robert

+1

@robert +1 đó là một điểm tuyệt vời, bạn nên cung cấp nó, bao gồm giải pháp, lên như một câu trả lời. – Nix

Trả lời

11

Sử dụng

out_file = open(outp, "w") 
sub = subprocess.call(['sed', 's/\"//g', inp], stdout=out_file) 
+0

@robert, tôi không có cà phê nào, nhưng tôi không thấy bất kỳ không gian nào? – Nix

+0

Điều đó có ý nghĩa. Cảm ơn! D :-) –

6

Nó sẽ là nhanh hơn nhiều để bỏ chạy tất cả các quá trình sed và chỉ làm việc bằng 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) 

này sẽ chạy nhanh hơn đáng kể, vì nó sẽ không ngã ba rất nhiều quy trình phụ.

+3

Tôi nghĩ rằng nó nên được 'thay đổi = data.replace ('"', '') 'thay vào đó. – msakya

Các vấn đề liên quan