python: передача нескольких параметров для команды Popen - PullRequest
4 голосов
/ 22 декабря 2011

Я потратил несколько часов, пытаясь выяснить, как передать несколько параметров в скрипт Python, который должен выполняться подпроцессом. Открыт без всякой удачи.

Скрипт:

command = ['/usr/bin/python', '/tmp/script.py mcl=NULL mtp=data mnm=DS4INST \
          mno=NULL mse=NULL mce=cll01'] 

result = subprocess.Popen(command, stdout = subprocess.PIPE, \
         stderr = subprocess.PIPE)

out, err = result.communicate()

print out, err 

Я получаю следующее сообщение об ошибке:

python: can't open file '/tmp/script.py mcl=NULL mtp=data mnm=DS4INST mno=NULL \
mse=NULL mce=cll01': [Errno 2] No such file or directory 

Однако при выполнении скриптанепосредственно из оболочки

/usr/bin/python /tmp/script.py mcl=NULL mtp=data mnm=DS4INST mno=NULL \
mse=NULL mce=cll01

Я получаю желаемый вывод и сообщение об ошибке не генерируется.

Пожалуйста, сообщите.

1 Ответ

6 голосов
/ 22 декабря 2011

Попробуйте это:

command = ['/usr/bin/python', '/tmp/script.py', 'mcl=NULL', 'mtp=data', 'mnm=DS4INST', 'mno=NULL' 'mse=NULL', 'mce=cll01'] 

В вашем коде второй элемент command рассматривается как один единственный аргумент и интерпретируется как:

/usr/bin/python "/tmp/script.py mcl=NULL mtp=data mnm=DS4INST mno=NULL mse=NULL mce=cll01"

так же, как длинное имя файла с пробелами.

Вы должны разбить аргументы на отдельные элементы списка command.

...