我试图运行下面的小Python脚本:Python 2.5的subprocess.Popen问题
#!/usr/local/bin/python2.5
import sys, subprocess
child = subprocess.Popen("muscle -stable -FASTA",
stdin=sys.stdin,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=(sys.platform!="win32"))
print child.stderr.read()
print child.stdout.read()
如果stdin
不超过约3750个字符,工作正常。超过此限制,子流程不再生产任何stdout
或stderr
。如果我分别将它们切换为sys.stdout
和sys.stderr
,则所有事情均按预期工作。当从命令行调用时,muscle
可执行文件同时写入stdout
和stderr
。
任何建议可能是什么原因以及如何解决这个问题? - 最好不要更新Python,因为安装位于我有限访问的服务器上。
谢谢,“out,err = child.communicate()”完美地工作。但为什么我不明白。由于geekosaur解释的原因? – 2011-03-24 23:00:07
@user:'communic'触发两个线程,它们同时读取'stdout'和'stderr'。 http://svn.python.org/view/python/trunk/Lib/subprocess.py?revision=82075&view=markup – 2011-03-24 23:03:13
现在我看到链接并阅读它,是的:-) – 2011-03-24 23:05:19