【发布时间】:2013-04-11 10:46:50
【问题描述】:
我有一个 Python 程序,它通过subprocess.Popen 打开另一个 Python 程序。第一个应该将一些文本输出到控制台(仅供参考),并将一些文本写入它产生的第二个程序。然后,它应该等待第二个程序响应(来自它的read()),并打印该响应。
第二个应该听第一个的输入(通过raw_input()),然后print 文本到第一个。
为了了解到底发生了什么,我在第二次延迟了 5 秒,结果让我有点吃惊。
代码如下:
import subprocess
print "1st starting."
app = subprocess.Popen("name", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) #<--- B
print "Writing something to app's STDIN..."
app.stdin.write(some_text)
print "Reading something from my STDIN..." #<--- A
result = app.stdout.read()
print "Result:"
print result
第二个:
import time
print "app invoked."
print "Waiting for text from STDIN..."
text = raw_input()
#process(text)
time.sleep(5)
print "magic"
当我运行这段代码时,它在 A 点暂停,因为那是最后一个控制台输出。
5 秒后,"Result:\n" 行将被输出,第二个程序具有 printed 的所有内容都会显示在控制台中。
为什么第一个程序在读取第二个程序的标准输出时会暂停?在读取其输出之前是否必须等待其子进程终止?如何更改它以便我可以在程序之间传递消息?
我正在运行 Debian Linux 7.0。
【问题讨论】:
标签: python linux shell stdout stdin