当我使用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?
期待你的答案。
答案 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”。