¿Cómo guardar una sesión interactiva de Python?
Con frecuencia uso el intérprete de Python para trabajar con bases de datos, archivos, etc., básicamente mucho formateo manual de datos semiestructurados. No guardo ni limpio adecuadamente las partes útiles con tanta frecuencia como me gustaría. ¿Hay alguna manera de guardar mi entrada en el shell (conexiones de base de datos, asignaciones de variables, pequeños bucles for y bits de lógica): algo de historial de la sesión interactiva? Si uso algo así, script
obtengo demasiado ruido estándar. Realmente no necesito encurtir todos los objetos, aunque si hay una solución que lo haga, estaría bien. Lo ideal sería que me quedara con un script que se ejecutara como el que creé interactivamente, y podría simplemente eliminar los bits que no necesitaba. ¿Existe algún paquete que haga esto o un enfoque de bricolaje?
IPython es extremadamente útil si te gusta utilizar sesiones interactivas. Por ejemplo, para su caso de uso existe el %save
comando mágico , simplemente ingresa %save my_useful_session 10-20 23
para guardar las líneas de entrada 10 a 20 y 23 en my_useful_session.py
(para ayudar con esto, cada línea tiene el prefijo de su número).
Además, la documentación dice:
Esta función utiliza la misma sintaxis que %history para rangos de entrada y luego guarda las líneas con el nombre de archivo que especifique.
Esto permite, por ejemplo, hacer referencia a sesiones más antiguas, como
%save current_session ~0/
%save previous_session ~1/
Mire los videos en la página de presentación para obtener una descripción general rápida de las funciones.
Del sitio web de Andrew Jones ( archivado ):
import readline
readline.write_history_file('/home/ahj/history')
Hay una manera de hacerlo. Guarde el archivo en ~/.pystartup
...
# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it: "export PYTHONSTARTUP=/home/user/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.
import atexit
import os
import readline
import rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
y luego configure la variable de entorno PYTHONSTARTUP
en su shell (por ejemplo, en ~/.bashrc
):
export PYTHONSTARTUP=$HOME/.pystartup
También puedes agregar esto para obtener el autocompletado gratis:
readline.parse_and_bind('tab: complete')
Tenga en cuenta que esto sólo funcionará en sistemas *nix. Como readline solo está disponible en la plataforma Unix.
Si está utilizando IPython, puede guardar en un archivo todos sus comandos anteriores usando la función mágica %history con el parámetro -f , pe:
%history -f /tmp/history.py