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 subprocess
la 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.
Vous devez vous connecter pour publier un commentaire.
À obtenir à la fois le processus de sortie et le code de retour:
subprocess.CalledProcessError
est une classe. Pour accéder àreturncode
utiliser l'instance exception:Les plus susceptibles de ma réponse, n'est plus pertinente, mais je pense qu'il peut être résolu avec ce code: