无缝地显示子进程的stdout和stderr

时间:2018-02-20 23:09:15

标签: python subprocess

关于如何打印子进程的stdoutstderr,还有一些其他问题。最终目标是运行一个命令,其输出与bash上的输出相同。

我现在有这样的事情:

with subprocess.Popen(['java', '-jar', 'myJar.jar'],
        env=dict(os.environ, JAVA_OPTS="-Xmx64M"),
        stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc:
    for line in proc.stdout:
        print(line.decode('utf-8'), end='')

我缺少的是stderr部分。我想避免使用stderr=subprocess.STDOUT重定向它,而是将其保留在shell上 另一个警告是,我正在使用的命令默认为彩色输出,理想情况下我想维护它。

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

我不知道我是否正确但你错过stdout部分对吗? 尝试此示例并根据需要更改命令:

def create_dir(self, path: str):
    cmd = 'sudo mkdir {}'.format(path)
    _sw = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = _sw.communicate()
    return out, err

shell选项取决于需求,因为我记得会以b'String'格式