我正在尝试编写一个能够与其他程序交互的python程序.这意味着发送stdin并接收stdout数据.我不能使用pexpect(尽管它确实激发了一些设计).我现在正在使用的过程是这样的:
subprocess.poll
我一直在制作一些代码(下面)的原型,但它似乎有一个瑕疵让我烦恼.子进程完成后,如果我在使用时未指定超时,则父进程将挂起select.select.我真的不想设置超时.它看起来有点脏.但是,我尝试解决这个问题的所有其他方法似乎都不起作用.Pexpect似乎通过使用os.execv而pty.fork不是subprocess.Popen和pty.openpty我不喜欢的解决方案来绕过它.我是如何检查子流程的生命周期的?我的方法不正确吗?
我正在使用的代码如下.我在Mac OS X 10.6.8上使用它,但我也需要它在Ubuntu 12.04上工作.
这是子进程运行程序runner.py:
import subprocess
import select
import pty
import os
import sys
def main():
master, slave = pty.openpty()
process = subprocess.Popen(['python', 'outputter.py'],
stdin=subprocess.PIPE,
stdout=slave, stderr=slave, close_fds=True)
while process.poll() is None:
# Just FYI timeout is the last argument to select.select
rlist, wlist, xlist = select.select([master], [], [])
for f in rlist:
output = os.read(f, 1000) # This …Run Code Online (Sandbox Code Playgroud)