passthru () + Pipe в подпроцессе = Traceback (последний вызов был последним): (…) в stdout = subprocess.PIPE) - PullRequest
0 голосов
/ 14 марта 2012

У меня есть ошибка, когда я использую passthru () для вызова скрипта Python (используя подпроцесс и канал) с PHP.

Вот ошибка:

Traceback (последний вызов был последним): Файл «… / Desktop / h.py», строка 11, в stdout = subprocess.PIPE) # задает команду преобразования и направляет вывод в файл «Файл» / System / Library /Frameworks / Python.framework / Versions / 2.5 / lib / python2.5 / subprocess.py ", строка 593, в init errread, errwrite) файле" /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/subprocess.py ", строка 1079, в _execute_child повышения child_exception OSError: [Errno 2] Нет такого файла или каталога

PHP passthru:

<?php
passthru("/usr/bin/python2.5 /Users/Nagar/Desktop/h.py $argument1 $argument2 1 2>&1");
?>

Моя строка Python, которая вызывает ошибку:

p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE) #set up the convert command and direct the output to a pipe

Как правильно использовать stdout = subprocess.PIPE в подпроцессе?

Ожидание ваших ответов.

Ответы [ 2 ]

1 голос
/ 20 июня 2012

Это потому, что он должен выполняться через оболочку, поэтому вам нужно установить аргумент оболочки в True:

p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE, shell=True)convert command and direct the output to a pipe
0 голосов
/ 20 марта 2012

Похоже, у вашего PATH нет каталога, включая команду "convert". Попробуйте заменить:

p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE)

с:

p1 = subprocess.Popen(['/full/path/to/convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE)

где "/ full / path / to / convert" может быть чем-то вроде "/usr/bin/convert".

...