2011-08-11 26 views
10

Tôi cần chạy một ứng dụng (tệp nhị phân) và chuyển đối số bằng cách sử dụng mã Python. Một số đối số đại diện cho chuỗi có trong quá trình xử lý tệp Python.Làm thế nào để chạy ứng dụng với các tham số trong Python?

for i in range (len (files)) : 
    subprocess.call(["test.exe", files[i]]) //How to pass the argument files[i] 

Thanks ...

câu hỏi Cập nhật:


Có lẽ tôi không hiểu qua các đối số bằng Python 3. Một mã không có tham số chạy OK

args = ['test. exe'] 
subprocess.call(args) 

Tuy nhiên mã với tham số gây ra lỗi:

args = ['test. exe'] 
subprocess.call(args, '-f') //Error 

Lỗi:

Error File "C:\Python32\lib\subprocess.py", line 467, in call 
return Popen(*popenargs, **kwargs).wait() 
File "C:\Python32\lib\subprocess.py", line 652, in __init__ 
raise TypeError("bufsize must be an integer") 
TypeError: bufsize must be an integer 

Trả lời

2

Tất cả bạn cần làm là đưa nó vào trong danh sách đối số, thay vì như một đối số riêng biệt:

subprocess.call(["test.exe", files[i]]) 
3

liên quan đến câu hỏi cập nhật của bạn Với : Các đối số cho tiến trình con của bạn không được chuyển thành các tham số riêng lẻ để gọi(); đúng hơn, họ đang trôi qua như một danh sách duy nhất của chuỗi, như vậy:

args = ["test.exe", "first_argument", "second_argument"] 

phản ứng gốc: Mã này khi bạn có nó sẽ tạo ra một quá trình riêng biệt cho mỗi phần tử trong tập tin. Nếu đó là những gì bạn muốn, mã của bạn sẽ hoạt động. Nếu bạn muốn gọi chương trình với tất cả các tập tin cùng một lúc, bạn sẽ muốn nối danh sách của bạn:

args = ["test.exe"] + files 
subprocess.call(args) 
15
args = ['test. exe'] 
subprocess.call(args, '-f') //Error 

nên là: tất cả

args = ['test.exe', '-f'] 
subprocess.call(args) 

Đối số dòng lệnh nên bên trong một danh sách duy nhất cho tham số đầu tiên của subprocess.call. Đối số thứ hai để gọi là bufsize, được cho là số nguyên (do đó tại sao bạn nhận được lỗi bạn làm)

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