首页 > 解决方案 > Python子进程:来回传递多个输入/输出

问题描述

我正在尝试使用 subproccess.Popen 来允许两个 Python 程序或多或少地进行对话。我希望能够从父级向子级发送输入,接收子级的响应,然后基于该响应,发送一个新的输入。subprocess.communicate() 在一次 I/O 交互后关闭进程。是否可以为多个 I/O 保留同一个子进程?目前,我的代码挂起。

父代码:

from __future__ import print_function
import subprocess
import sys


try:
     p = subprocess.Popen(['python','childprocess.py'],
                          stdin=subprocess.PIPE,
                          stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE,
                          bufsize=1,
                          universal_newlines=True)
except Exception as e:
     print("Error: "+str(e))
     sys.exit(-1)

p.stdin.write('This is the first input\n')
p.stdin.flush()
print(p.stdout.readline())
p.stdin.write('This is the second input\n')
print(p.stdout.readline())

子代码:

input_one = raw_input()
print "Input One: ",input_one
input_two = raw_input()
print "Input Two: ",input_two

在这种情况下,我可以只给出两个输入,然后读取两个输出,但是如果我希望能够使用子输出来通知父输入(例如数字猜测器),我可以用子进程来做到这一点吗?

标签: pythonsubprocess

解决方案


您将需要使用 subprocess.Popen() 函数来保持进程处于活动状态。

相关的SO问题供参考:

保持子进程活着并继续给它命令?Python


推荐阅读