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 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).
http://www.andrewhjon.es/save-interactive-python-session-history
import readline
readline.write_history_file(''/home/ahj/history'')
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.