2010-11-09 14 views
31

A menudo me piden depurar scripts de Python escritos por otros. Me gustaría enviar estos scripts a IPython para que caigan en un shell de IPython en el punto en que falla el script.Opciones de línea de comandos para scripts * de IPython *?

Lamentablemente, no puedo encontrar la forma de enviar (requerido) las opciones de línea de comandos requeridas por los scripts.

IPython asume todo es para IPython cuando paso la secuencia de comandos y sus opciones como:

ipython <script_name> <script_options> 

¿Hay una solución o solución?

Respuesta

23
ipython -i -c "%run test.py 1 2 3 4" 
+0

muy agradable! Lamentablemente, cuando se produce una excepción, me devuelve a la línea de comandos del sistema operativo, no a la solicitud de IPython. Sugerencias? –

+1

Bueno, podría simplemente iniciar ipython y luego ejecutar% test.py 1 2 3 4 –

+1

En realidad, agregar el -i hace que permanezca en el shell. –

39
ipython -- sometest.py 1 2 3 4 
+2

Funciona, pero no pude encontrar esto en los documentos, ¿me puede indicar dónde está documentado esto? –

+3

También para permanecer dentro del shell interactivo use la sintaxis 'ipython -i - sometest.py 1 2 3 4'. –

+2

Tenga en cuenta que '-' es una característica del intérprete de shell del sistema, y ​​no es específica del intérprete de ipython –

4

Sé que hay una solución ya aceptada, pero en la versión más reciente de ipython esto no funcionará. Aquí está un cortar y pegar del comando que utilizo para ejecutar las pruebas de tornado con --autoreload

ipython --c="%run test.py --autoreload" 

Esto es usando ipython 0,11.

1

Ejemplo simple here.

script.py

from sys import argv 

script, first, second, third = argv 

print "The script is called:", script 
print "Your first variable is:", first 
print "Your second variable is:", second 
print "Your third variable is:", third 

shell:

$ ipython script.py stuff things that 
The script is called: ex13.py 
Your first variable is: stuff 
Your second variable is: things 
Your third variable is: that 
0

Muchos aspectos del comportamiento de IPython se pueden controlar a través de la configuración de los archivos de configuración IPython del usuario, que normalmente se encuentran en ~/.ipython/. Un usuario puede crear múltiples perfiles , cada uno con diferentes configuraciones de los parámetros de configuración. Cada perfil tiene su configuración en una carpeta separada en la carpeta .ipython. El perfil predeterminado está en profile_default, y el archivo principal allí para personalizar el comportamiento es ipython_config.py. Por defecto, se comenta casi por completo, con líneas comentadas que muestran las variables de configuración y sus configuraciones predeterminadas. Descomente o inserte líneas para alterar el comportamiento.

Para cambiar cómo se comporta IPython al final de la ejecución de un script, utilice:

c.TerminalIPythonApp.force_interact = True 

Luego, cuando termina la secuencia de comandos (o genera una excepción), IPython seguirá funcionando y le mostrará un mensaje. Este es el mismo comportamiento que ipython -i.

Utilizo esta configuración en mi perfil predeterminado, porque esta es la forma en que siempre quiere que IPython se comporte. Si ese no es el caso para usted, podría crear un perfil con este comportamiento, para usar solo cuando desee este comportamiento. O simplemente siga usando la opción (evidentemente no documentada) -i.

documentación de configuración IPython está disponible aquí:

Cuestiones relacionadas