Python error: subprocess.CalledProcessError: Command returned non-zero exit status 1
Question: I need to count the lines of a shell-command output in python script.

This function works fine in case there is output, but in case the output is
empty, it gives an error as explained in the error output.  
I tried to avoid that using an `if` statement in case the output of the
command is `None`, but that didn't help.

    
    
    #!/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
    

Error output:

    
    
    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
    


Answer: The `grep` command you're running exits with exit status `1` if it doesn't
match anything. That non-zero exit code causes `check_output` to raise an
exception (that's what the "check" part of its name means).

If you don't want a failed match to raise an exception, consider using
`subprocess.getoutput` instead of `check_output`. Or you could change your
command to avoid non-zero exit codes:

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

