J'ai un framework écrit en python, et à des fins de test, je veux essentiellement faire un sous-processus (alias appel shell) ... qui devrait simplement revenir avec un RC! = 0. J'ai essayé d'invoquer un exécutable inexistant; ou pour exécuter "exit 1"; mais ceux-ci sont traduits pour une raison quelconque en une FileNotFoundError.
Alors, que puis-je faire d'autre pour déclencher un code retour! = 0 (de manière "fiable", ce qui signifie que la commande ne devrait pas retourner soudainement 0 à un moment ultérieur).
J'ai pensé "rechercher" un binaire appelé exit, mais bon:
> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory
command-line
bash
python
scripts
GhostCat
la source
la source
exit 1
est la voie à suivre pour l'avenir. L'erreur FileNotFoundError doit être causée par autre chose./bin/false
?Réponses:
Si vous recherchez une commande système qui renvoie toujours un code de sortie différent de zéro, il
/bin/false
semble que cela devrait fonctionner pour vous. Deman false
:la source
/bin/false 5; echo $?
5
) sont ignorésVous pouvez créer un nouveau code retour avec la commande
bash -c "exit RETURNCODE"
, en remplaçant "RETURNCODE" par n'importe quel nombre. Notez qu'il sera réduit à un entier non signé 8 bits (0 ... 255) par (RETURNCODE mod 256)Vous pouvez vérifier le code retour de la dernière commande shell à l'intérieur du terminal (!) Avec l'exécution
echo $?
. Le "$?" La variable contient le code retour le plus récent et "echo" l'imprime sur la sortie standard.la source
exit RETURNCODE
(sans labash -c
partie)Après quelques tests supplémentaires, j'ai trouvé que mon problème n'était pas du côté "Linux".
Python a un module shlex; qui devrait être utilisé pour "diviser" les chaînes de commandes. Lorsque j'ai changé mon appel de sous-processus pour utiliser la sortie d'
shlex.split()
invocation de "bash exit 1", cela me donne ce dont j'ai besoin.la source