subprocess.CalledProcessError:错误是什么?

kev*_*kev 2 python subprocess

import subprocess

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

subprocess.check_output(cmd, shell=True)
Run Code Online (Sandbox Code Playgroud)

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

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

该代码段是一个较大的脚本的一部分,该脚本带有多个参数并链接grep命令+添加一些排除项(我不需要grep日志文件或压缩后的JavaScript。因此,使用了学究的语法。

Python 2.7.10

Łuk*_*ski 5

引用文档

如果返回码非零,则会引发一个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
Run Code Online (Sandbox Code Playgroud)

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

除了返回代码和stdout / stderr,没有其他“出了什么问题”的原因。


Cha*_*ffy 5

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

引用手册:

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

0     One or more lines were selected.
1     No lines were selected.
>1    An error occurred.
Run Code Online (Sandbox Code Playgroud)

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