Как запустить приложение с параметрами в Python? - PullRequest
10 голосов
/ 12 августа 2011

Мне нужно запустить приложение (двоичный файл) и передать аргументы, используя код Python. Некоторые аргументы представляют строки, полученные во время обработки файла Python.

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

Спасибо ...

Обновленный вопрос:


Может быть, я не понимаю передачу аргументов в Python 3. Код без параметров работает нормально

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

Однако код с параметром вызывает ошибку:

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

Ошибка:

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

Ответы [ 3 ]

17 голосов
/ 12 августа 2011
args = ['test. exe']
subprocess.call(args, '-f')  //Error

должно быть:

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

Аргумент командной строки должен находиться внутри одного списка для первого параметра subprocess.call.Второй аргумент для вызова - это bufsize, который должен быть целым числом (следовательно, почему вы получаете ошибку, которую делаете)

3 голосов
/ 12 августа 2011

Что касается вашего обновленного вопроса: Аргументы для вашего подпроцесса не передаются как отдельные параметры для вызова (); скорее они передаются в виде единого списка строк, например:

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

Оригинальный ответ: Код, который у вас есть, создаст отдельный процесс для каждого элемента в файлах. Если это то, что вы хотите, ваш код должен работать. Если вы хотите вызвать программу со всеми файлами одновременно, вам нужно объединить свой список:

args = ["test.exe"] + files
subprocess.call(args)
2 голосов
/ 12 августа 2011

Все, что вам нужно сделать, это включить его в список аргументов, а не как отдельный аргумент:

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