Python错误:subprocess.CalledProcessError:命令返回非零退出状态1

时间:2016-03-23 19:04:09

标签: python command-line subprocess

我需要在python脚本中计算shell命令输出的行数。

如果有输出,此功能可正常工作,但如果输出为空,则会出现错误输出中所述的错误。
我试图避免使用if语句,以防命令输出为None,但这没有帮助。

#!/usr/bin/python
import subprocess

lines_counter=0
func="nova list | grep Shutdown "
data=subprocess.check_output(func, shell=True)
if data is True:
       for line in data.splitlines():
               lines_counter +=1
print lines_counter

错误输出:

data=subprocess.check_output(func, shell=True)
  File "/usr/lib/python2.7/subprocess.py", line 573, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'nova list | grep Shutdown ' returned non-zero exit status 1

3 个答案:

答案 0 :(得分:3)

您正在运行的grep命令退出时退出状态为1,如果它与任何内容都不匹配。该非零退出代码会导致check_output引发异常(这就是其名称的“检查”部分的含义)。

如果您不希望失败的匹配引发异常,请考虑使用subprocess.getoutput而不是check_output。或者您可以更改命令以避免非零退出代码:

func = "nova list | grep Shutdown || true"

答案 1 :(得分:0)

您可以通过try-except块包围subprocess调用:

try:
    data = subprocess.check_output(func, shell=True)
except Exception:
    data = None

另外,写if data: would be better而不是if data is True:

答案 2 :(得分:0)

这就是它的工作原理 如第一个解决方案中所述: 如果grep命令与任何内容都不匹配,则退出状态为1。该非零退出代码导致check_output引发异常(这就是其名称的“检查”部分的含义)。

func = "nova list | grep Shutdown || true"

代码:

  lines_counter=0
    func="nova list | grep Shutdown || true"
    try:
        data = subprocess.check_output(func, shell=True)
    except Exception:
        data = None
    for line in data():
            lines_counter +=1
    print lines_counter
相关问题