与子沟通,而无需等待子进程终止窗口(Communicate with subprocess with

2019-09-03 18:53发布

我有一个简单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的子模块?

Answer 1:

主要问题是用线...

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

...它应该工作,你期望它的方式。



文章来源: Communicate with subprocess without waiting for the subprocess to terminate on windows