This question already has answers here:
Communicate multiple times with a process without breaking the pipe?

(4个答案)


5年前关闭。




我正在尝试将输入管道传递给在Python中作为子进程打开的程序。使用communication()可以实现我想要的功能,但是只执行一次,然后等待子进程终止,然后再继续进行操作。
在功能上是否有类似于communication()的方法或模块,但允许与子进程进行多次通信?
这是一个例子:
import subprocess

p = subprocess.Popen('java minecraft_server.jar',
                 shell=True,
                 stdin=subprocess.PIPE);

//Pipe message to subprocess console here

//Do other things

//Pipe another message to subprocess console here
如果可以在不使用子流程的情况下以更简单的方式完成此操作,那也很好。

最佳答案

您可以根据需要将write转换为p.stdin(以及每次flush,以确保实际发送了数据)。问题仅在于您想确保返回结果(因为很难说服其他进程使用而不是缓冲其输出!-),但是由于您甚至没有在stdout=类中设置Popen,因此很明显对你来说不是问题。 (当是一个问题,并且您确实需要击败另一个进程的输出缓冲策略时,pexpect或Windows上的wexpect是最好的解决方案-我经常在stackoverflow上推荐它们,但不要这样做)暂时没有网址,因此,请自己搜索(如果是,则与您的示例相反,您确实有此需要)。

09-12 00:04