使用子进程多次通信

时间:2010-08-10 20:56:02

标签: communication subprocess python

我正在尝试将输入传递给在Python中作为子进程打开的程序。使用communic()做我想要的,但它只执行一次,然后在允许继续之前等待子进程终止。

是否有类似于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

如果可以在不使用子流程的情况下以更简单的方式完成,那也会很棒。

1 个答案:

答案 0 :(得分:7)

您可以writep.stdin(每次都flush以确保数据实际发送),并且可以根据需要分开多次。问题只有在你想确保得到结果的时候(因为很难说服其他进程缓冲他们的输出! - ),但是因为你甚至没有设置{{ 1}}在你的stdout=课程中,这对你来说显然不是问题。 (当 出现问题,并且你真的需要打败其他进程的输出缓冲策略时,Popen - 或Windows上的pexpect是最好的解决方案 - 我非常经常在stackoverflow上推荐它们,但现在没有手头的URL,所以请自己搜索 if ,与你的例子相反,你确实有这个需要)。