【发布时间】:2009-07-06 16:03:57
【问题描述】:
我需要启动一个外部进程,该进程将通过标准输入和标准输出来回发送的消息进行控制。使用 subprocess.Popen 我可以启动该过程,但无法根据需要通过 stdin 控制执行。
我想要完成的流程是:
- 启动外部进程
- 迭代一些步骤
- 通过将换行符写入其标准输入来告诉外部进程完成下一个处理步骤
- 等待外部进程通过将换行符写入其标准输出来指示其已完成该步骤
- 关闭外部进程的标准输入以向外部进程指示执行已完成。
到目前为止,我想出了以下几点:
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() 处阻塞,不再继续。我错误地使用了communicate() 方法?
另外,我将如何实现“等到外部进程写入新行”的功能?
【问题讨论】:
标签: python subprocess