忽略CalledProcessError

时间:2012-08-18 04:10:09

标签: python shell subprocess

我正在使用subprocess模块和check_output()在我的Python脚本中创建一个虚拟shell,它适用于返回零退出状态的命令,但是对于没有它的命令返回一个异常而不打印在普通shell上输出中显示的错误。

例如,我希望能有这样的工作:

>>> shell('cat non-existing-file')
cat: non-existing-file: No such file or directory

但相反,会发生这种情况:

>>> shell('cat non-existing-file')
CalledProcessError: Command 'cat non-existing-file' returned non-zero exit status 1 (file "/usr/lib/python2.7/subprocess.py", line 544, in check_output)

即使我可以使用tryexcept删除Python异常消息,我仍然希望cat: non-existing-file: No such file or directory显示给用户。

我将如何做到这一点?

shell()

def shell(command):
    output   = subprocess.check_output(command, shell=True)
    finished = output.split('\n')

    for line in finished:
      print line
    return

1 个答案:

答案 0 :(得分:9)

或许这样的事情?

def shell(command):
    try:
        output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
    except Exception, e:
        output = str(e.output)
    finished = output.split('\n')
    for line in finished:
        print line
    return