无缝显示子过程的Stdout和Stderr



关于如何打印子过程的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重定向并保留它,因为它会在外壳上。
另一个警告是,我使用的命令默认情况下具有着色的输出,理想情况下我想维护它。

我如何能够实现这一目标?

我不知道我是否让你正确,但是你缺少 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'格式

最新更新