Popen - 读取stdout和stderr而不冻结或关闭stdin

时间:2017-02-24 17:07:10

标签: python python-3.x popen

我正在用Python编写一个与jar文件交互的脚本,jar文件在某些​​时候可以通过stdin请求用户输入,但是它也可以打印出错误。

为此我正在使用subprocess.Popen但是我在尝试读取输出和错误输出时遇到困难,必要时写入stdin并再次执行相同操作。

但是当使用Popen.stderr.read()时它会冻结,因为没有错误要读取,并且当使用Popen.communicate()来获取输出时,我不能再向进程的STDIN发送更多数据。

我怎么能解决这个问题?这是我的代码:

from subprocess import Popen, PIPE

with Popen (["java","-jar","something.jar"], stdin=PIPE, stdout=PIPE, stderr=PIPE) as process:
    # Closes STDIN, unable to communicate back
    # stdout, stderr = process.communicate()

    # Hangs forever if no STDERR is ever printed
    # stdout = process.stdout.read()
    # stderr = process.stderr.read()

0 个答案:

没有答案