tutorial software online idle python python-interactive

online - python software



¿Cómo hacer que un script de python invoque "python-i" cuando se llama normalmente? (5)

Tengo una secuencia de comandos de Python que me gusta ejecutar con python -i script.py , que ejecuta la secuencia de comandos y luego ingresa en el modo interactivo para que pueda jugar con los resultados.

¿Es posible que el script mismo invoque esta opción, de manera que solo pueda ejecutar python script.py y el script entre en modo interactivo después de ejecutarse?

Por supuesto, simplemente puedo agregar el -i , o si eso es demasiado esfuerzo, puedo escribir un script de shell para invocar esto.


Además de todas las respuestas anteriores, puede ejecutar el script como simplemente ./script.py haciendo que el archivo sea ejecutable y configurando la línea shebang, por ejemplo

#!/usr/bin/python -i this = "A really boring program"

Si desea usar esto con el comando env para obtener el python predeterminado del sistema, puede intentar usar un shebang como @donkopotamus sugerido en los comentarios

#!/usr/bin/env PYTHONINSPECT=1 python

Sin embargo, el éxito de esto puede depender de la versión de env instalada en su plataforma.


Creo que estas buscando code.interact ?

import code foo = ''bar'' print foo code.interact(local=locals())


Desde dentro de script.py , establezca la variable de entorno PYTHONINSPECT en cualquier cadena no vacía. Python volverá a verificar esta variable de entorno al final del programa y entrará en el modo interactivo.

import os # This can be placed at top or bottom of the script, unlike code.interact os.environ[''PYTHONINSPECT''] = ''TRUE''


Podría usar una instancia de code.InteractiveConsole para que esto funcione:

from code import InteractiveConsole i = 20 d = 30 InteractiveConsole(locals=locals()).interact()

ejecutando esto con python script.py lanzará un intérprete interactivo como la declaración final y hará visibles los nombres locales definidos a través de locals=locals() .

>>> i 20

De manera similar, se puede usar una función de conveniencia llamada code.interact :

from code import interact i = 20 d = 30 interact(local=locals())

Esto crea la instancia para usted, con la única advertencia de que los locals se denominan local lugar.

Además de esto, como Blender declaró en los comentarios, también puede incrustar el IPython REPL usando:

import IPython IPython.embed()

que tiene el beneficio adicional de no requerir que el espacio de nombres que se ha completado en su script se pase con los locals .


Simplemente acompañaría el script con un script de shell que lo invoque.

exec python -i "$(dirname "$0")/script.py"