与子进程只能通信一次吗?
communicate
的文档中说:
与进程互动:发送数据到标准输入(stdin)。从标准输出(stdout)和标准错误(stderr)读取数据,直到文件结束。等待进程结束。
如果你需要多次向一个进程发送输入,该怎么办呢?比如,我启动了一个进程,给它发送了一些数据,进程处理这些数据后返回了一些输出,然后我又需要再发送输入,这样该怎么处理呢?
4 个回答
3
那么你就不能使用 .communicate()
这个方法了。你可以选择轮询这些流,或者使用 select
,或者其他一些方法来监听文件描述符的变化(比如 gtk 和 Qt 都有这样的工具)。
3
看看 Doug Hellman 的 Python 每周模块介绍,里面讲了 subprocess。往下翻,直到你看到“repeater.py”。
在那儿,你会找到一个例子,教你怎么给一个进程发送和接收输入/输出。
2
不要用 subprocess
来做这个事情,这样会让你在处理缓冲时遇到很多麻烦。
我推荐使用 pexpect,这个工具效果很好。不过不幸的是,目前它在Windows系统上不太好用,虽然我听说过有个版本可以用,但现在找不到了。