我有一个简单的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子进程模块一起使用?
答案 0 :(得分:4)
主要问题在于线......
print proc.stdout.read()
在没有参数的情况下使用read()
方法将读取所有数据,直到EOF,直到子进程终止才会发生。
你可能会逐行阅读,所以你可以使用......
proc.stdin.write("hello\n")
print proc.stdout.readline()
...否则你将不得不解决其他一些划分'消息'的方法。
您必须对echoprocess.py
进行类似的更改,即更改...
data = sys.stdin.read()
...到...
data = sys.stdin.readline()
您可能还遇到输出缓冲问题,因此在写入后可能需要flush()
缓冲区。
如果将echoprocess.py
更改为...
import sys
while True:
data = sys.stdin.readline()
sys.stdout.write("Here is the data: " + str(data))
sys.stdout.flush()
...和parentprocess.py
到......
from subprocess import Popen, PIPE
proc = Popen(["C:/python27/python.exe", "echoprocess.py"],
stdin = PIPE,
stdout = PIPE)
proc.stdin.write("hello\n")
proc.stdin.flush()
print proc.stdout.readline()
......它应该按照你期望的方式工作。