在Python中与子进程多次通信

Cyk*_*ker 6 python ipc

这个问题不是重复的

与一个进程进行多次通信而不破坏管道?

这个问题得到了解决,因为它的用例允许输入一起发送,但如果您的程序是交互式的(如此处的用例所示),则情况并非如此。


文件subprocess.Popen说:

communicate(input=None)
    Interact with process: Send data to stdin.  Read data from stdout
    and stderr, until end-of-file is reached.  Wait for process to
    terminate.  ...
Run Code Online (Sandbox Code Playgroud)

是否可以在子进程终止之前与子进程进行多次通信,例如与终端或网络套接字?

例如,如果子进程是bc,则父进程可能希望根据需要向其发送不同的输入以进行计算。由于发送到的输入bc可能取决于用户输入,因此不可能一次发送所有输入。

yac*_*ccz 2

基本上是对 python 中的 subprocess.PIPE 进行非阻塞读取

通过将 proc 管道(proc.stdout、proc.stdin、...)设置为非阻塞模式fnctl,然后直接写入/读取它们。

您可能想使用 epoll 或通过selectio模块进行选择以获得更高的效率。