【发布时间】:2012-03-29 07:00:14
【问题描述】:
我正在尝试使用subprocess 模块与带有 Python 的命令行聊天机器人进行通信。 (http://howie.sourceforge.net/ 使用编译好的win32二进制,我有我的理由!)
这行得通:
proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
output = proc.communicate()
但是Popen.communicate 等待进程终止(并将其发送 EOF?),我希望能够与之交互。对此的明显解决方案是像这样读取stdout / 写入stdin:
这不起作用:
proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
while True: print proc.stdout.readline()
(请注意,我实际上使用的是基于http://code.activestate.com/recipes/440554/ 的更复杂的代码,但问题是一样的。)
问题是,第二种方法非常适合与 cmd 通信,但是当我运行聊天机器人时,什么也没有。所以我的问题是,捕获输出与使用 Popen.communicate() 有何不同?
即我可以使用第二种方法照常使用命令行,直到我运行聊天机器人,此时我停止接收输出。使用第一种方法可以正确显示机器人的前几行输出,但我无法与之交互。
【问题讨论】:
标签: python stdout popen subprocess