Python subprocess 获取输出问题

我的需求是,调用了Popen后每输入一个数据都能及时返回结果:

命令
输出
命令
输出

但现在遇到的问题是,communicate或stdin输入数据后必须关闭,stdout才能获取到结果:

popen.stdin.write("命令".encode("gbk"))
popen.stdin.close()
输出
popen.stdin.write("命令".encode("gbk"))
ValueError: write to closed file

您可以使用Popen的stdout和stderr属性来实现实时获取输出的需求,而不必等待communicate或stdin关闭。以下是一个示例代码:

import subprocess

popen = subprocess.Popen("命令", stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)

while True:
    output = popen.stdout.readline().decode("gbk").strip()
    if output:
        print(output)
    else:
        break

popen.stdin.write("输入数据".encode("gbk"))
popen.stdin.flush()

while True:
    output = popen.stdout.readline().decode("gbk").strip()
    if output:
        print(output)
    else:
        break

popen.stdin.write("输入数据".encode("gbk"))
popen.stdin.flush()

popen.stdin.close()
popen.wait()

在这个示例中,我们使用了Popen的stdout属性来实时获取命令的输出。我们使用了一个while循环来读取输出,直到输出为空为止。然后我们使用stdin.write方法来输入数据,并使用stdin.flush方法来刷新缓冲区,确保数据被发送到命令的标准输入流。最后,我们关闭stdin并等待命令结束。

根据您提供的信息,我无法确定问题的具体含义和解决方案。请提供更多上下文和详细信息,以便我能够更好地帮助您。

如果您能够提供更具体的信息,例如问题出现的环境、操作系统、Python代码段等,我会尽力为您提供帮助。