passthru() + Pipe in subprocess = Traceback (última chamada mais recente):(…) em stdout=subprocess.PIPE)

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

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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top