繁体   English   中英

与子进程通信,无需等待子进程在Windows上终止

[英]Communicate with subprocess without waiting for the subprocess to terminate on windows

我有一个简单的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子进程模块一起使用?

主要问题是线路......

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM