Vérifier une commande de retour de ce code lors de la sous-processus soulève une exception CalledProcessError

Je veux capturer la stdout flot d'une commande shell dans un python (3) script, et d'être capable, dans le même temps, de vérifier le code de retour de la commande shell si elle renvoie une erreur (qui est, si son code de retour n'est pas 0).

subprocess.check_output semble être la méthode appropriée pour ce faire. De subprocessla page de manuel:

check_output(*popenargs, **kwargs)
    Run command with arguments and return its output as a byte string.

    If the exit code was non-zero it raises a CalledProcessError.  The
    CalledProcessError object will have the return code in the returncode
    attribute and output in the output attribute.

Encore, je ne réussisse pas à obtenir le code de retour de la commande shell lorsqu'il échoue. Mon code ressemble à ceci:

import subprocess
failing_command=['ls', 'non_existent_dir']

try:
    subprocess.check_output(failing_command)
except:
    ret = subprocess.CalledProcessError.returncode  # <- this seems to be wrong
    if ret in (1, 2):
        print("the command failed")
    elif ret in (3, 4, 5):
        print("the command failed very much")

Ce code génère une exception dans le traitement de l'exception elle-même:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
AttributeError: type object 'CalledProcessError' has no attribute 'returncode'

J'avoue que je ne sais pas où je me trompe.

InformationsquelleAutor michaelmeyer | 2013-03-09