2011-08-04 37 views
9

tôi có một chương trình mà tôi chạy từ dòng lệnh đó trông như thế này:Sử dụng python để chạy chương trình khác?

$ program a.txt b.txt

Chương trình yêu cầu hai tập tin văn bản như các đối số. Tôi đang cố gắng viết một kịch bản Python 3.2 để chạy chương trình trên. Tôi có thể làm cái này như thế nào? Hiện nay, tôi đang cố gắng sử dụng các mô-đun subprocess như thế này:

import subprocess 

with open("a.txt", mode="r") as file_1: 
    with open("b.txt", mode="r") as file_2: 
     cmd = ['/Users/me/src/program', file_1, file_2] 
     process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
     for line in process.stdout: 
      print(line) 

tôi đọc this post và bài here, mà dường như để mô tả các giải pháp tương tự như vấn đề của tôi. Thật không may, sau khi đọc những bài viết này, tôi vẫn không thể làm cho mã Python của tôi chạy chương trình của tôi.

Có ai giúp được không? Cảm ơn trước!

Trả lời

14

subprocess.Popen mong đợi một chuỗi các chuỗi. Hai trong số các mục trong mảng đó là các tệp xử lý. Bạn cần phải chuyển tệp thực tế tên vào chương trình bạn đang cố gắng chạy.

cmd = ['/Users/me/src/program', 'a.txt', 'b.txt'] 

Bạn có thể loại bỏ hoàn toàn các dòng with open(...) as ....

+0

Cảm ơn bạn đã trợ giúp, bằng cách nào đó tôi đã bỏ lỡ 'quy trình con.Popen()' yêu cầu các chuỗi không xử lý tệp. Giải pháp của bạn làm việc như một sự quyến rũ! – drbunsen

5

Tùy thuộc vào yêu cầu của bạn, os.system(cmdline) có thể là giải pháp mẫu.

13

Nhìn vào @Chris's answer, và cũng có thể:

trình con không chờ đợi cho đến khi kết thúc lệnh, vì vậy bạn nên sử dụng phương pháp wait.

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
    process.wait() 
    for line in process.stdout: 
     print(line) 
+2

Cảm ơn bạn đã chỉ ra phương thức 'wait' - tôi không biết điều này. – drbunsen

+0

Nếu bạn muốn các dòng trong khi vẫn đang chạy, hãy xem câu trả lời của tôi. – agf

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