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
答案 0 :(得分: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
错误消息已打印到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 *
在目录中所有其他文件的内容中搜索目录中第一个文件的名称。