关于如何打印子过程的stdout
和stderr
还有其他一些问题。最终的目标是运行与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'
格式