J'ai un framework écrit en python, et à des fins de test, je veux fondamentalement faire un sous-processus (aka call call) ... qui devrait simplement revenir avec un RC! = 0. J'ai essayé d'appeler un exécutable non existant; ou exécuter "sortie 1"; mais ceux-ci sont, pour une raison quelconque, traduits en FileNotFoundError.
Alors, que puis-je faire d'autre pour déclencher un code de retour! = 0 (de manière "fiable"; cela signifie que la commande ne doit pas renvoyer soudainement le 0 à un moment ultérieur).
Je pensais "chercher" un binaire appelé exit, mais bon:
> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory
Si vous recherchez une commande system qui renvoie toujours un code de sortie différent de zéro, alors /bin/false
semble bien fonctionner. De man false
:
NAME
false - do nothing, unsuccessfully
SYNOPSIS
false [ignored command line arguments]
false OPTION
DESCRIPTION
Exit with a status code indicating failure.
Vous pouvez créer un nouveau code de retour avec la commande bash -c "exit RETURNCODE"
, en remplaçant "RETURNCODE" par un nombre quelconque. Notez qu'il sera coupé à un entier non signé de 8 bits (0 ... 255) par (RETURNCODE mod 256)
Vous pouvez vérifier le code de retour de la dernière commande Shell à l'intérieur du terminal (!) en exécutant echo $?
. Le "$?" variable contient le code de retour le plus récent et "echo" l’affiche sur la sortie standard.
Après quelques essais supplémentaires, j'ai constaté que mon problème n'était pas du côté "Linux".
Python a un module shlex; qui devrait être utilisé pour "scinder" les chaînes de commande. Lorsque j'ai modifié l'appel de mon sous-processus pour utiliser la sortie de shlex.split()
, l'appel de "bash exit 1" me donne ce dont j'ai besoin.