将子流程stderr重定向到stdout

将子流程stderr重定向到stdout,第1张

将子流程stderr重定向到stdout

仔细阅读源代码即可得出答案。特别是,该文档在显示以下内容时会产生误导:

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())'


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5644979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存