我有一个 Python 程序,它通过subprocess.Popen
. 第一个应该向控制台输出一些文本(仅供参考),并将一些文本写入它产生的第二个程序。然后,它应该等待第二个程序响应(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"
行将被输出,第二个程序print
编辑的所有内容都将显示在控制台中。
为什么第一个程序在读取第二个程序的标准输出时会暂停?在读取其输出之前是否必须等待其子进程终止?如何更改它以便我可以在程序之间传递消息?
我正在运行 Debian Linux 7.0。