我試圖運行下面的小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