与子进程只能通信一次吗?

4 投票
4 回答
1174 浏览
提问于 2025-04-15 15:40

communicate的文档中说:

与进程互动:发送数据到标准输入(stdin)。从标准输出(stdout)和标准错误(stderr)读取数据,直到文件结束。等待进程结束。

如果你需要多次向一个进程发送输入,该怎么办呢?比如,我启动了一个进程,给它发送了一些数据,进程处理这些数据后返回了一些输出,然后我又需要再发送输入,这样该怎么处理呢?

4 个回答

3

那么你就不能使用 .communicate() 这个方法了。你可以选择轮询这些流,或者使用 select,或者其他一些方法来监听文件描述符的变化(比如 gtk 和 Qt 都有这样的工具)。

3

看看 Doug Hellman 的 Python 每周模块介绍,里面讲了 subprocess。往下翻,直到你看到“repeater.py”。

在那儿,你会找到一个例子,教你怎么给一个进程发送和接收输入/输出。

2

不要用 subprocess 来做这个事情,这样会让你在处理缓冲时遇到很多麻烦。

我推荐使用 pexpect,这个工具效果很好。不过不幸的是,目前它在Windows系统上不太好用,虽然我听说过有个版本可以用,但现在找不到了。

撰写回答