2011-07-19 11 views
6

¿Alguien sabe cómo comprobar el estado del último comando ejecutado (código de salida) en ipython?Verificar el estado de salida del último comando en ipython

+2

¿Estás mirando el comando dentro de python utilizando algo así como os.system? ¿O está ejecutando el comando foo y luego ejecuta su secuencia de comandos python? – Zoredache

+0

simplemente usando ipython como shell y ejecutando comandos con! Cmd – piotr

Respuesta

6

que suponer que usted está hablando acerca de cómo ejecutar comandos desde IPython usando el escape !:

In[1]: !echo hello 
hello 

In[2]: 

Usando Google me encontré con la documentación y no hay ninguna mención sobre el estado de salida del comando de ser capturado en cualquier lugar. Utilizando dir() busqué un nombre de variable que pudiera contener esa información y no encontré nada. Probé la sintaxis x = !ls y x se establece en una lista de líneas de salida desde el comando; no hay estado de salida allí.

En resumen, no creo que IPython siquiera esté capturando esta información. En este punto, me gustaría verificar el código fuente de IPython para tratar de descubrir algo más.

Siempre puede ejecutar el comando con os.system() y obtener un estado de salida de eso.

In[1]: !launch_eva 
launch_eva: could not open AT Field 

In[2]: import os 
In[3]: exit_status = os.system("launch_eva") 
launch_eva: could not open AT Field 

In[4]: exit_status 
3 

In[5]: 

Así vemos el comando launch_eva está devolviendo el código de salida 3 cuando no se puede abrir un campo AT.

Parece que esto es algo que IPython debería estar guardando. Hay muchas pequeñas variables ocultas. Debe presentar una solicitud de función sobre esto.

NOTA: Esto se probó en IPython 0.10.1 en Ubuntu. Otra respuesta, por "piotr", dice que el código de salida se capturará en IPython 0.11, debido a su lanzamiento pronto. Cloné el código fuente del repositorio de Git al https://github.com/ipython/ipython.git y lo probé con python ipython.py; como dijo piotr, el estado de salida se guarda en una variable llamada _exit_status.

+1

+1 para la referencia de Evangelion. :) –

+0

Me preguntaba si alguien lo notaría y lo disfrutaría. :-) – steveha

13

Debe almacenarse como _exit_code después de ejecutar el comando (al menos en la próxima versión v0.11).

+1

¡Gracias por esta información! Yo voté a favor esto – steveha

+2

a partir de 0.13.2, esto funciona, pero no si capturo stdout con "a =! False" (si capturo stdout '_exit_code' no cambia). Alguien sabe si hay una solución? –

Cuestiones relacionadas