仔细阅读源代码即可得出答案。特别是,该文档在显示以下内容时会产生误导:
subprocess.STDOUT
表示(…)的特殊值表示标准错误应与标准输出进入同一 。
由于-1
在stderr=subprocess.STDOUT
求值时stdout设置为“默认”(技术上来说),因此stderr也设置为“默认”。不幸的是,这意味着stderr输出仍然归stderr。
要解决此问题,请传入stdout文件而不是subprocess.STDOUT
:
$ python >/dev/null -c 'import subprocess,sys;subprocess.call(["ls", "/404"],
stderr=sys.stdout.buffer)'
或者,为了与旧版2.x Python版本兼容:
$ python >/dev/null -c 'import subprocess,sys;subprocess.call(["ls", "/404"],
stderr=sys.stdout.fileno())'