versiones guia español descargar actualizar python shell read-eval-print-loop interactive-session

python - guia - qgis manual



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

Además de IPython, una utilidad similar bpython tiene una función de "guardar el código que ingresó en un archivo"

Me encuentro con frecuencia usando el intérprete de Python para trabajar con bases de datos, archivos, etc., básicamente, mucho formato manual de datos semiestructurados. No guardo y limpio adecuadamente los bits útiles con la frecuencia que quisiera. ¿Hay alguna forma de guardar mi entrada en el shell (conexiones db, asignaciones de variables, poco para bucles y bits de lógica), algo de historia de la sesión interactiva? Si uso algo como un script , obtengo demasiado ruido de stdout. Realmente no necesito decapar todos los objetos, aunque si hay una solución que haga eso, estaría bien. Lo ideal sería que me dejaran con un script que se ejecutara como el que creé interactivamente, y podría eliminar los bits que no necesitaba. ¿Hay un paquete que hace esto, o un enfoque de bricolaje?

ACTUALIZACIÓN : Estoy realmente sorprendido por la calidad y la utilidad de estos paquetes. Para aquellos con una picazón similar:

  • IPython: debería haber estado usando esto durante años, una especie de lo que tenía en mente
  • reinteract - muy impresionante, quiero aprender más sobre la visualización y esto parece que brillará allí. Algo así como una aplicación de escritorio gtk / gnome que muestra los gráficos en línea. Imagina una cáscara híbrida + calculadora gráfica + mini eclipse. Fuente de distribución aquí: http://www.reinteract.org/trac/wiki/GettingIt . Construido bien en Ubuntu, se integra también en los instaladores de escritorio gnome, Windows y Mac.
  • bpython - extremadamente bueno, muchas características agradables, autocompletar (!), rebobinar, una pulsación de tecla guardada en archivo, sangría, bien hecho. La distribución de fuentes de Python, extrajo un par de dependencias de sourceforge.

Estoy convertido, estos realmente satisfacen una necesidad entre el intérprete y el editor.


Además, reinteract le brinda una interfaz similar a una notebook para una sesión de Python.


Algunos comentarios preguntaban cómo guardar todas las entradas de IPython a la vez. Para% save magic en IPython, puede guardar todos los comandos mediante programación como se muestra a continuación, para evitar el mensaje de solicitud y también para evitar especificar los números de entrada. currentLine = len (In) -1% save -f my_session 1- $ currentLine

La opción -f se usa para forzar la sustitución de archivos y el len(IN)-1 muestra el indicador de entrada actual en IPython, lo que le permite guardar la sesión completa de manera programática.


Después de instalar IPython y abrir una sesión de Ipython ejecutando el comando:

ipython

desde su línea de comandos, simplemente ejecute el siguiente comando ''mágico'' de Ipython para registrar automáticamente su sesión completa de Ipython:

%logstart

Esto creará un archivo .py con un nombre único y almacenará su sesión para usarla más tarde como una sesión interactiva de Ipython o para usarla en los scripts de su elección.


El comando %history es impresionante, pero desafortunadamente no te permitirá guardar las cosas que se hayan pegado% en la sesión. Para hacer eso, creo que tienes que hacer %logstart al principio (aunque no he confirmado que esto funcione).

Lo que me gusta hacer es

%history -o -n -p -f filename.txt

que guardará la salida, los números de línea y ''>>>'' antes de cada entrada (opciones o, n y p). Ver los documentos para% historia %history .


En lo que respecta a Linux, se puede usar un comando de script para grabar toda la sesión. Es parte del paquete util-linux por lo que debería estar en la mayoría de los sistemas Linux. Puede crear un alias o función que llamará script -c python y que se guardará en un archivo de script -c python . Por ejemplo, aquí hay una reimpresión de uno de esos archivos.

$ cat typescript Script started on Sat 14 May 2016 08:30:08 AM MDT Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print ''Hello Pythonic World'' Hello Pythonic World >>> Script done on Sat 14 May 2016 08:30:42 AM MDT

La pequeña desventaja aquí es que el script graba todo, incluso los saltos de línea, cada vez que golpeas los espacios en blanco, etc. Por lo tanto, es posible que desees usar col para limpiar la salida (consulta esta publicación en Unix y Linux Stackexchange ).


Hay otra opción --- pyslice. en el "wxpython 2.8 docs demos y herramientas", hay un programa de código abierto llamado "pyslices".

puede usarlo como un editor, y también es compatible con el uso como una consola: ejecutar cada línea como un intérprete interactivo con eco inmediato.

por supuesto, todos los bloques de códigos y resultados de cada bloque se registrarán en un archivo txt automáticamente.

los resultados se registran justo detrás del bloque de código correspondiente. muy conveniente.


Hay una way de hacerlo. Almacena 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 puede agregar esto para obtener autocompletar de forma gratuita:

readline.parse_and_bind(''tab: complete'')

Tenga en cuenta que esto solo funcionará en sistemas * nix. Como readline solo está disponible en la plataforma Unix.


Hay% history magic para imprimir y guardar el historial de entrada (y opcionalmente la salida).

Para almacenar su sesión actual en un archivo llamado my_history.py :

>>> %hist -f my_history.py

Historial IPython almacena tanto los comandos que ingresa como los resultados que produce. Puede pasar fácilmente por los comandos anteriores con las teclas de flecha hacia arriba y hacia abajo, o acceder a su historial de manera más sofisticada.

Puede usar la función% history magic para examinar entradas y salidas pasadas. El historial de entrada de las sesiones anteriores se guarda en una base de datos, e IPython se puede configurar para guardar el historial de salida.

Varias otras funciones mágicas pueden usar su historial de entrada, incluyendo% edit,% rerun,% recall,% macro,% save y% pastebin. Puede utilizar un formato estándar para referirse a las líneas:

%pastebin 3 18-20 ~1/1-5

Esto tomará la línea 3 y las líneas 18 a 20 de la sesión actual, y las líneas 1-5 de la sesión anterior.

Ver% de historia? Para la Docstring y más ejemplos.

Además, asegúrese de explorar las capacidades de % store magic para la persistencia ligera de variables en IPython.

Almacena variables, alias y macros en la base de datos de IPython.

d = {''a'': 1, ''b'': 2} %store d # stores the variable del d %store -r d # Refresh the variable from IPython''s database. >>> d {''a'': 1, ''b'': 2}

Para restaurar automáticamente las variables almacenadas en el inicio, especifique c.StoreMagic.autorestore = True en ipython_config.py.


Me gustaría sugerir otra forma de mantener la sesión de python a través de tmux en linux. ejecuta tmux, adjúntese a la sesión que abrió (si no se adjunta después de abrirla directamente). ejecuta python y haz lo que estés haciendo en él. luego desprenderse de la sesión. la separación de una sesión tmux no cierra la sesión. La sesión permanece abierta.

ventajas de este método: puede adjuntar a esta sesión desde cualquier otro dispositivo (en caso de que pueda ssh su PC)

contras de este método: este método no renuncia a los recursos utilizados por la sesión de python abierta hasta que realmente exista el intérprete de python.


Para aquellos que usan spacemacs e ipython que viene con python-layer , save magic crea una gran cantidad de resultados no deseados, debido al comando de autocompletado constante que funciona en spacemacs , como:

len(all_suffixes) '';''.join(__PYTHON_EL_get_completions(''''''len'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all_substa'''''')) len(all_substantives_w_suffixes) '';''.join(__PYTHON_EL_get_completions(''''''len'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all_'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all_w'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all_wo'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all_wor'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all_word'''''')) '';''.join(__PYTHON_EL_get_completions(''''''all_words'''''')) len(all_words_w_logograms) len(all_verbs)

Para evitar esto, simplemente guarde el búfer ipython como normalmente guarda cualquier otro: spc fs


Si está usando IPython , puede guardar en un archivo todos sus comandos anteriores usando la función magic %history con el parámetro -f , pe:

%history -f /tmp/history.py


Si usa bpython , todo su historial de comandos se guarda por defecto en ~/.pythonhist .

Para guardar los comandos para su reutilización posterior, puede copiarlos en un archivo de script de python:

$ cp ~/.pythonhist mycommands.py

Luego edite ese archivo para limpiarlo y colóquelo en la ruta de Python (paquetes de sitios del entorno virtual o virtual, directorio actual, mencionando en * .pth, o de alguna otra forma).

Para incluir los comandos en su shell, solo impórtelos desde el archivo guardado:

>>> from mycommands import *


Solo pongo otra sugerencia en el bol: Spyder

Tiene historial de registro y explorador de variables . Si has trabajado con MatLab, verás las similitudes.


Tuve que luchar para encontrar una respuesta, era muy nuevo en el entorno iPython.

Esto funcionara

Si tu sesión de iPython se ve así

In [1] : import numpy as np .... In [135]: counter=collections.Counter(mapusercluster[3]) In [136]: counter Out[136]: Counter({2: 700, 0: 351, 1: 233})

Desea guardar líneas del 1 al 135 y luego en la misma sesión de ipython use este comando

In [137]: %save test.py 1-135

Esto guardará todas sus declaraciones de python en el archivo test.py en su directorio actual (donde inició el ipython).



IPython es extremadamente útil si te gusta usar sesiones interactivas. Por ejemplo, para su caso de uso existe el comando %save magic , usted solo %save my_useful_session 10-20 23 para guardar las líneas de entrada 10 a 20 y 23 a my_useful_session.py (para ayudar con esto, cada línea está precedida por su número).

Además, la documentación establece:

Esta función utiliza la misma sintaxis como %history para los rangos de entrada, luego guarda las líneas en 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 visión general rápida de las características.