【发布时间】:2012-05-15 19:51:55
【问题描述】:
我试图在 python 中调用一个 shell 脚本,但它一直报告损坏的管道错误(结果是好的,但我不想在 STDERR 中看到错误消息)。已经查明原因,可以复现为如下sn-p:
subprocess.call('cat /dev/zero | head -c 10 | base64', shell=True)
AAAAAAAAAAAAAAA==
cat:写入错误:管道损坏
/dev/zero 是一个无限流,但head -c 10 只从中读取 10 个字节并退出,然后 cat 将获得 SIGPIPE,因为对等方已关闭管道。我在shell中运行命令时没有损坏管道错误消息,但是为什么python会显示它?
【问题讨论】:
-
跳过uuoc:
subprocess.call('head -c 10 < /dev/zero | base64', shell=True)时错误消失 -
@larsmans:你可以把它作为答案
-
@ChrisMorgan:实际上,我非常喜欢你的回答。
-
@larsmans:这取决于他在做什么。如果不是像
head和base64这样简单的东西,在纯Python 中管理起来可能太难了。你的问题解决了as ask,这是有价值的。 -
@ChrisMorgan:是的。不过,如果我了解发生了什么,我只会发布答案,而我没有。我以前从未见过
cat抱怨管道破裂,并且一直依靠管道关闭时它默默退出。
标签: python bash subprocess