【发布时间】:2018-07-12 00:39:10
【问题描述】:
在 bash 中执行一个简单的命令
cmd='ls -l | wc -l'
我知道我们可以使用 subprocess call/check_output/communicate 以多种方式运行此命令。如果初始命令由于某种原因不起作用或失败,则会出现问题。就像 [用 lsx 替换 ls]。
cmd='lsx -l | wc -l'
在这种情况下,我们如何捕获错误,或者我们只需要处理输出就可以了?这是我尝试过的。
import subprocess
>>> subprocess.call('lsx -l | wc -l', shell=True)
/bin/sh: lsx: command not found
0
0
>>> subprocess.check_output('lsx -l | wc -l', shell=True)
/bin/sh: lsx: command not found
b' 0\n'
上面两条命令的错误码好像还是0。 我也试过https://docs.python.org/3.5/library/subprocess.html#replacing-shell-pipeline,但不知道如何获取第一个进程的错误代码。
【问题讨论】:
-
为什么不将
stderr分配给某个东西并检查它是否为空? -
@Ranjit,...按照您链接的“替换 shell 管道”示例,很有可能获得退出代码——您能展示一下您的尝试吗?
标签: python linux subprocess pipe