Check a command's return code when subprocess raises a CalledProcessError exception

后端 未结 2 972
鱼传尺愫
鱼传尺愫 2020-12-05 10:20

I want to capture the stdout stream of a shell command in a python (3) script, and being able, at the same time, to check the return code of the shell command i

2条回答
  •  北海茫月
    2020-12-05 11:13

    To get both the process output and the returned code:

    from subprocess import Popen, PIPE
    
    p = Popen(["ls", "non existent"], stdout=PIPE)
    output = p.communicate()[0]
    print(p.returncode)
    

    subprocess.CalledProcessError is a class. To access returncode use the exception instance:

    from subprocess import CalledProcessError, check_output
    
    try:
        output = check_output(["ls", "non existent"])
        returncode = 0
    except CalledProcessError as e:
        output = e.output
        returncode = e.returncode
    
    print(returncode)
    

提交回复
热议问题