在Python中与子进程进行多次通信

在Python中与子进程进行多次通信,python,ipc,Python,Ipc,这个问题不是重复的 这个问题之所以得以解决,是因为它的用例允许将输入发送到一起,但如果您的程序是交互式的(如这里的用例所示),则情况并非如此 文档子流程。Popen说明: communicate(input=None) Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to

这个问题不是重复的

这个问题之所以得以解决,是因为它的用例允许将输入发送到一起,但如果您的程序是交互式的(如这里的用例所示),则情况并非如此


文档
子流程。Popen
说明:

communicate(input=None)
    Interact with process: Send data to stdin.  Read data from stdout
    and stderr, until end-of-file is reached.  Wait for process to
    terminate.  ...
是否可以在子进程终止之前与它进行多次通信,如与终端或网络套接字通信

例如,如果子进程是
bc
,则父进程可能希望根据需要向其发送不同的输入以进行计算。由于发送到
bc
的输入可能取决于用户输入,因此不可能一次发送所有输入。

基本上

通过
fnctl
将过程管道(proc.stdout、proc.stdin,…)设置为非阻塞模式,然后直接写入/读取它们


您可能希望通过
select
io
模块使用epoll或select,以提高效率。

这不是很困难:

proc = subprocess.Popen(['bc'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
os.write(proc.stdin.fileno(), b'100+200\n')
print(os.read(proc.stdout.fileno(), 4096))