Passthru () + Труба в подпроцессе= Traceback (последний звонок последним): (...) в stdout= subprocess.pipe)

StackOverflow https://stackoverflow.com//questions/9707520

Вопрос

У меня есть ошибка, когда я использую 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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top