passthru()+子进程中的管道= Traceback(最近一次调用最后一次):stdout = subprocess.PIPE中的(...)

时间:2012-03-14 18:02:41

标签: subprocess pipe traceback passthru

当我使用passthru()用PHP调用python脚本(使用子进程和管道)时,我遇到了错误。

这是错误:

  

回溯(最近一次调用最后一次):文件“... / Desktop / h.py”,第11行,在stdout = subprocess.PIPE中)#set up convert命令并将输出定向到管道文件“/ 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 个答案:

答案 0 :(得分:1)

这是因为它需要通过shell执行,所以你需要将shell参数设置为True:

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

答案 1 :(得分:0)

看起来你的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”。