7

我有一个简单的 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 子进程模块可以进行这种进程间通信吗?

4

1 回答 1

6

主要问题是线路...

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()

...它应该按照您期望的方式工作。

于 2013-05-16T16:39:15.307 回答