¿Cómo guardar una sesión interactiva de Python?

Resuelto unmounted asked hace 15 años • 20 respuestas

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í, scriptobtengo 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?

unmounted avatar Jun 04 '09 06:06 unmounted
Aceptado

IPython es extremadamente útil si te gusta utilizar sesiones interactivas. Por ejemplo, para su caso de uso existe el %savecomando mágico , simplemente ingresa %save my_useful_session 10-20 23para 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.

Ants Aasma avatar Jun 03 '2009 23:06 Ants Aasma

Del sitio web de Andrew Jones ( archivado ):

import readline
readline.write_history_file('/home/ahj/history')
Roberto Z avatar Mar 15 '2012 13:03 Roberto Z

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 PYTHONSTARTUPen 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.

Nadia Alramli avatar Jun 03 '2009 23:06 Nadia Alramli

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
nachouve avatar Apr 30 '2015 17:04 nachouve