Passthru () + Труба в подпроцессе= Traceback (последний звонок последним): (...) в stdout= subprocess.pipe)
-
14-12-2019 - |
Вопрос
У меня есть ошибка, когда я использую Passthru (), чтобы вызвать скрипт Python (с помощью подпроцесса и трубы) с PHP.
Вот ошибка:
Traceback (самый последний вызов Last): файл "... / desktop / h.py", строка 11, в stdout= subprocess.pipe) # Установите команду конвертации и направьте вывод в файл трубы "/ Система /Библиотека / Frameworks / Python.framework / Версии / 2.5 / lib / python2.5 / subprocess.py ", Line 593, в
INIT Errread, Errwrite) файл" / Система / Библиотека / frameworks / python.Framework / Versions / 2.5 / lib / python2.5 / subprocess.py ", line 1079, в _execute_child Rissing 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 правильно в подпроцессе?
С нетерпением жду ваших ответов.
Решение
Похоже, ваш путь не имеет каталога, включая команду «Конвертировать».Попробуйте заменить:
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".
Другие советы
Это потому, что он должен быть выполнен через оболочку, поэтому вам нужно установить аргумент оболочки в true:
p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE, shell=True)convert command and direct the output to a pipe
.