passthru() + 子进程中的管道 = Traceback(最近一次调用最后一次):(…)在 stdout=subprocess.PIPE)
Posted
技术标签:
【中文标题】passthru() + 子进程中的管道 = Traceback(最近一次调用最后一次):(…)在 stdout=subprocess.PIPE)【英文标题】:passthru() + Pipe in subprocess = Traceback (most recent call last): (…) in stdout=subprocess.PIPE) 【发布时间】:2012-03-31 05:46:00 【问题描述】:当我使用 passthru() 通过 php 调用 python 脚本(使用子进程和管道)时出现错误。
这是错误:
Traceback(最近一次调用最后一次):文件“…/Desktop/h.py”,第 11 行,在 stdout=subprocess.PIPE)#设置转换命令并将输出定向到管道文件“/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", line 1079, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory
PHP 通路:
<?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?
期待您的回答。
【问题讨论】:
【参考方案1】:因为需要通过shell执行,所以需要设置shell参数为True:
p1 = subprocess.Popen(['convert', fileIn, 'pnm:-'], stdout=subprocess.PIPE, shell=True)convert command and direct the output to a pipe
【讨论】:
【参考方案2】:您的 PATH 似乎没有包含“转换”命令的目录。尝试替换:
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”。
【讨论】:
以上是关于passthru() + 子进程中的管道 = Traceback(最近一次调用最后一次):(…)在 stdout=subprocess.PIPE)的主要内容,如果未能解决你的问题,请参考以下文章