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"