passthru() + Pipe in subprocess = Traceback (última chamada mais recente):(…) em stdout=subprocess.PIPE)
-
14-12-2019 - |
Pergunta
Recebi um erro ao usar passthru() para chamar um script python (usando subprocesso e pipe) com PHP.
Aqui está o erro:
Traceback (última chamada mais recente):Arquivo "…/Desktop/h.py", linha 11, em stdout=subprocess.PIPE) #configure o comando convert e direcione a saída para um pipe Arquivo "/System/Library/Frameworks/Python.framework/Versions/2.5 /lib/python2.5/subprocess.py", linha 593, em iniciar errread, errwrite) Arquivo "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/subprocess.py", linha 1079, em _execute_child raise child_exception OSError:[Errno 2] Esse arquivo ou diretório não existe
A passagem do PHP:
<?php
passthru("/usr/bin/python2.5 /Users/Nagar/Desktop/h.py $argument1 $argument2 1 2>&1");
?>
Minha linha Python que causa o erro:
p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE) #set up the convert command and direct the output to a pipe
Como usar stdout=subprocess.PIPE corretamente no subprocesso?
Aguardo suas respostas.
Solução
Parece que seu PATH não possui o diretório incluindo o comando "convert".Tente substituir:
p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE)
com:
p1 = subprocess.Popen(['/full/path/to/convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE)
onde "/full/path/to/convert" pode ser algo como "/usr/bin/convert".
Outras dicas
É porque ele precisa ser executado através de um shell, então você precisa definir o argumento do shell como True:
p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE, shell=True)convert command and direct the output to a pipe