我需要启动一个外部进程,该进程将通过标准输入和标准输出来回发送的消息进行控制。使用 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() 方法?
另外,我将如何实现“等到外部进程写入新行”的功能?