8
votes

Vérifiez l'état de sortie de la dernière commande à Ipython

Quelqu'un peut-il savoir comment vérifier l'état de la dernière commande exécutée (code de sortie) dans ipython?


2 commentaires

Regardez-vous la commande dans Python en utilisant quelque chose comme OS.System? Ou exécutez-vous la commande FOO, puis exécutez votre script Python?


Utilisez simplement Ipython comme Shell et courez des commandes avec! cmd


3 Réponses :


7
votes

Je suppose que vous parlez de commandes en cours d'exécution d'Ipython à l'aide du ! Escape: xxx

Utilisation de Google J'ai trouvé la documentation et il n'y a aucune mention de la L'état de sortie de la commande étant capturé n'importe où. Utilisation de Dir () J'ai cherché un nom de variable qui pourrait contenir cette information et je n'ai rien trouvé. J'ai essayé le x =! LS syntaxe et x est défini sur une liste des lignes de sortie de la commande; Il n'y a pas d'état de sortie là-bas.

En bref, je ne pense pas que Ipython capille même ces informations. À ce stade, je voudrais vérifier le code source à ipython pour essayer de déterminer quoi que ce soit d'autre.

Vous pouvez toujours exécuter la commande avec os.system () et obtenir Un statut de sortie à partir de celui-ci. xxx

donc nous voyons la commande launch_eva renvoie l'état de sortie 3 quand il ne peut pas ouvrir un sur champ. < / p>

On dirait que ceci est quelque chose que Ipython devrait épargner. Il y a beaucoup de petites variables cachées. Vous devez déposer une demande de fonctionnalité à ce sujet.

Remarque: Ceci a été testé dans Ipython 0.10.1 sur Ubuntu. Une autre réponse, par "Piotr", explique que le code de sortie sera capturé dans Ipython 0.11, en raison de la libération bientôt. J'ai cloné le code source du référentiel git à https://github.com/ipython/ipython.git: a> et testé avec python ipython.py ; Comme le dit Piotr, le statut de sortie est enregistré dans une variable appelée _exit_status .


0 commentaires

16
votes

Il doit être stocké comme _exit_code après avoir exécuté la commande (au moins dans la prochaine version V0.11).


1 commentaires

A partir de 0.13.2, cela fonctionne, mais pas si je capturai STDOUT avec "A =! FALSE" (si je capture stdout _exit_code ne change pas). Quelqu'un sait s'il y a une solution?



0
votes

Vous pouvez stocker le résultat de la commande dans la variable et vous pouvez vérifier la variable si elle est présente dans la fonction locale () ou non. Par exemple1: -

var1=subprocess.check_output('ps -aef | grep -i dmesg -wT | grep -v grep',shell=True)
if 'var1' in locals():
print "status is true i.e 0"
else :
print "status is false i.e 1"


0 commentaires