我需要启动一个外部进程,通过stdin和stdout来回发送消息来控制它。使用subprocess.Popen我能够启动该进程,但无法通过stdin控制执行,因为我需要。使用Python通过STDIN/STDOUT启动和控制外部进程
的我想要完成的流程是:
- 启动外部进程
- 迭代对于一些数量的步骤
- 告诉外部程序来完成下一个处理通过在它的stdin中写一个换行符
- 等待外部进程通过向它的stdout写入换行符来完成该步骤
- 关闭外部进程的标准输入以向外部进程指示执行已完成。
我想出了迄今为止以下:
process=subprocess.Popen([PathToProcess],stdin=subprocess.PIPE,stdout=subprocess.PIPE);
for i in xrange(StepsToComplete):
print "Forcing step # %s"%i
process.communicate(input='\n')
当我运行上面的代码中的“\ n”不会传递到外部的过程,我永远不会超越步骤#0 。 process.communicate()中的代码块不会继续进行。我正在使用communications()方法吗?
此外,我将如何实现“等到外部进程写入新行”功能块?
当我第一次这样做的时候,有些东西会让我咬牙切齿,如果你只发送几个字符,你可能不得不在发送任何东西之前刷新流。 – Kiv 2009-07-06 16:20:57