如何PIPE subprocess.Popen的输出,同时在以后与它通信?

时间:2017-08-27 11:43:32

标签: python subprocess real-time python-os

好的,这就是我需要做的事情。我试图从Popen输出PIPE,以实时显示它。但是,我需要在运行时与我的进程通信以发送输入。

列表exec_str_list中的第一个字符串包含需要执行的第一个shell命令,后续字符串包含需要传递到同一进程的输入。它包含两个字符串,但是为了概括问题,我们假设它包含更多,需要执行的顺序。

所以,回顾一下我需要发生的事情,第一个字符串被执行,我得到它的实时输出,我需要显示它。然后当进程期望来自用户的输入时,需要将第二个字符串传递给进程,同时实时显示控制台上发生的任何事情。

这是我的代码:

from subprocess import Popen, PIPE, STDOUT

exec_once = True
for str_to_exec in exec_str_list:
    if exec_once:
        proc = Popen(str_to_exec.split(), stdin=PIPE, stdout=PIPE, stderr=STDOUT)
        exec_once = False
    else:
        proc = proc.communicate(str_to_exec)

    for c in iter(lambda: proc.stdout.read(1), ''):
        publish_in_realtime(key, c, user=session.user)
        console_dump += c

0 个答案:

没有答案