【发布时间】:2013-05-11 16:02:42
【问题描述】:
我有一个简单的 echoprocess.py:
import sys
while True:
data = sys.stdin.read()
sys.stdout.write("Here is the data: " + str(data))
还有一个 parentprocess.py
from subprocess import Popen, PIPE
proc = Popen(["C:/python27/python.exe", "echoprocess.py"],
stdin = PIPE,
sdtout = PIPE)
proc.stdin.write("hello")
print proc.stdout.read()
这只是挂起,直到 echoprocess.py 终止。我想多次与这个子进程通信,而不必再次重新启动它。 Windows 上的 Python 子进程模块可以实现这种进程间通信吗?
【问题讨论】:
-
刚刚在我的回答中添加了关于输出缓冲的注释。不确定 Windows,但在 Linux 上
echoprocess.py中的那个是必要的,尽管parentprocess.py中的那个不是。始终包含它们以实现最大的便携性通常是最安全的。 -
可能还值得看看
multiprocessing模块,它为这种进程间通信提供了一个抽象层。 -
这就是我最初所做的,但我在 Windows 上遇到了一些初始问题。 Windows 要求将所有代码放在
if __name__ == "__main__":块中似乎需要我已经拥有的太多工作。
标签: python subprocess stdout stdin readline