subprocess.CalledProcessError:什么*是*错误?

时间:2016-09-19 00:13:40

标签: python subprocess

import subprocess

cmd = "grep -r * | grep jquery"
print cmd

subprocess.check_output(cmd, shell=True)

subprocess.CalledProcessError:命令'grep -r * | grep jquery'返回非零退出状态1

我可以在我的shell中执行该命令而不会出现问题。如何在python中看到实际错误?

该片段是一个更大的脚本的一部分,它接受多个参数并链接grep命令+添加一些排除(我不需要grep日志文件或缩小的JavaScript。因此迂腐的语法。

Python 2.7.10

2 个答案:

答案 0 :(得分:5)

Quoting docs

  

如果返回码非零,则会引发CalledProcessError。该   CalledProcessError对象将在returncode中包含返回码   属性和output属性中的任何输出。

import subprocess

cmd = "grep -r * | grep jquery"
print cmd

try:
    subprocess.check_output(cmd, shell=True)
except subprocess.CalledProcessError as e:
    print e.returncode
    print e.output

错误消息已打印到stderr,您需要关键字参数stderr=subprocess.STDOUT

除了返回代码和stdout / stderr之外,没有其他“错误”来源。

答案 1 :(得分:4)

"非零退出状态"表示您运行的命令表示状态不是成功。对于grep,文档明确指出退出状态为1表示未找到任何行,而退出状态大于1表示发生了其他错误。

引用手册:

  

退出状态 - grep实用程序以下列值之一退出:

0     One or more lines were selected.
1     No lines were selected.
>1    An error occurred.

顺便说一下 - 如果你想在当前目录(递归)下的所有文件中查找字符串jquery,请使用grep -r jquery .; grep -r *目录中所有其他文件的内容中搜索目录中第一个文件的名称