与子进程多次通信
我正在尝试将输入传递给一个在Python中以子进程形式打开的程序。使用communicate()可以实现我想要的效果,但它只能执行一次,然后会等子进程结束后才继续进行。
有没有类似于communicate()的方法或模块,可以和子进程进行多次交流呢?
这里有个例子:
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
如果能有更简单的方法,不用subprocess也可以,那就更好了。
1 个回答
7
你可以多次对 p.stdin
进行 write
操作(每次都要 flush
一下,以确保数据真的发送出去)。问题只在于你想要确保能收到结果的时候(因为让其他进程不缓存它们的输出是很难的!),但既然你在 Popen
类里根本没有设置 stdout=
,那显然这对你来说不是问题。(当这确实是个问题,而你又需要打破其他进程的输出缓存策略时,pexpect
或者在 Windows 上的 wexpect
是最好的解决方案。我在 stackoverflow 上经常推荐它们,但现在手头没有链接,所以如果你真的有这个需求,请自己搜索一下,尽管这和你的例子相反。)