Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在稍后与subprocess.Popen通信时通过管道传输subprocess.Popen的输出?_Python_Subprocess_Real Time_Python Os - Fatal编程技术网

Python 如何在稍后与subprocess.Popen通信时通过管道传输subprocess.Popen的输出?

Python 如何在稍后与subprocess.Popen通信时通过管道传输subprocess.Popen的输出?,python,subprocess,real-time,python-os,Python,Subprocess,Real Time,Python Os,好的,这是我需要做的。我正试图通过管道将Popen的输出实时显示出来。但是,我需要在进程运行时与进程通信以发送输入 列表exec_str_list中的第一个字符串包含需要执行的第一个shell命令,后续字符串包含需要传递到同一进程的输入。到目前为止,它包含两个字符串,但是为了概括这个问题,让我们假设它包含更多字符串,按照需要执行的顺序 所以,为了重述我需要发生的事情,第一个字符串被执行,我从中得到实时输出,我需要显示它。然后,当进程需要用户输入时,需要将第二个字符串传递给进程,同时实时显示控制台

好的,这是我需要做的。我正试图通过管道将Popen的输出实时显示出来。但是,我需要在进程运行时与进程通信以发送输入

列表
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

实际上,Communication会将您的输入发送到进程,然后等待()完成。您可能需要查找
Pexpect
@Vinny谢谢您的建议。我想它可以工作,但是我可以只使用
子进程
操作系统
模块使它工作吗?实际上,通信会将您的输入发送到进程,然后等待()完成。您可能需要查找
Pexpect
@Vinny谢谢您的建议。我想它可以工作,但是我可以只使用
子流程
操作系统
模块使它工作吗?