关于如何打印子进程的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
重定向它,而是将其保留在shell上
另一个警告是,我正在使用的命令默认为彩色输出,理想情况下我想维护它。
我怎样才能实现这个目标?
答案 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'
格式