Durante una sesión de trabajo IPython almacena tanto los comandos introducidos en las líneas de entrada "In" como los resultados que se originan en las líneas de salida "Out".
Como ya tratamos en el capítulo de "Facilidades para la escritura" con las teclas de [Fecha arriba] y [Flecha abajo] accedemos al historial de entradas asociado al usuario actual.
Como ya tratamos en el capítulo de "Facilidades para la escritura" con las teclas de [Fecha arriba] y [Flecha abajo] accedemos al historial de entradas asociado al usuario actual.
Accediendo al historial de la sesión actual
Mientras trabajamos IPython va numerando secuencialmente las entradas "In" y las salidas "Out". Debemos tener en cuenta que "In" es una lista y "Out" un diccionario Python y ambos objetos podemos referenciarlos por su nombre y un número de secuencia: In[Número] y Out[Número].
Ejemplos:
In [1]: 1 + 3
Out[1]: 4
In [2]: Out[1]
4
In [3]: In[1]
1 + 3
Otras modos de acceder al historial:
Acceder al valor de la última, penúltima y antepenúltima entrada: _i, _ii, _iii, respectivamente:
In [4]: _iii
Out[4]: '1 + 3'
In [4]: _iii
Out[4]: '1 + 3'
Mostrar todas las entradas del historial de la sesión actual: In ó _ih
In [5]: In
Out[5]: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In']
In [5]: In
Out[5]: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In']
Mostrar una entrada por su número: _iNúmero ó _ih[Número]
In [6]: _i4
Out[6]: '_iii'
In [6]: _i4
Out[6]: '_iii'
Acceder al valor de la última, penúltima y antepenúltima salida, introducir uno, dos o tres guiones bajos (_, __, ___), respectivamente:
In [7]: __
Out[7]: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In', '_i4', '__']
In [7]: __
Out[7]: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In', '_i4', '__']
Mostrar una salida por su número: _Número
In [8]: _6
Out[8]: '_iii'
In [8]: _6
Out[8]: '_iii'
Mostrar todas las salidas del historial de la sesión actual: Out ó _oh
In [9]: Out
{1: 4,
2: 4,
3: '1 + 3',
4: '1 + 3',
5: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In', '_i4', '__', '_6', 'Out'],
6: '_iii',
7: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In', '_i4', '__', '_6', 'Out'],
8: '_iii'}
In [9]: Out
{1: 4,
2: 4,
3: '1 + 3',
4: '1 + 3',
5: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In', '_i4', '__', '_6', 'Out'],
6: '_iii',
7: ['', '1 + 3', 'Out[1]', 'In[1]', '_iii', 'In', '_i4', '__', '_6', 'Out'],
8: '_iii'}
Accediendo al historial de cualquier sesión
La función mágica %history se utiliza también para mostrar el historial de entradas y salidas, permitiéndonos acceder a los historiales de sesiones anteriores . A continuación, se muestran varios ejemplos de uso.
: %hist o %history [Inicio-Fin] # Mostrar entradas desde inicio a fin
: %hist o %history -g cadena # Mostrar entradas que contengan cadena
: %hist -o ó %history -o [Inicio-Fin] # Mostrar entradas y salidas.
: %hist 1-10 -pof file.txt # Guardar historia en archivo. (-p) añade prompt
: %hist 20/1-10 # Listar 10 entradas de la sesión 20
: %hist ~2/1-10 # Listar 10 entradas de la penúltima sesión
: %hist ~2/1-10 -n # Listar 10 entradas de la penultima sesión numerando
: %hist 20/1-10 # Listar 10 entradas de la sesión 20
: %hist ~2/1-10 # Listar 10 entradas de la penúltima sesión
: %hist ~2/1-10 -n # Listar 10 entradas de la penultima sesión numerando
El historial de entrada de sesiones anteriores se almacena en un base de datos pero es posible configurar IPython para que guarde también el historial de salida.
Ejecutar entradas anteriores con %rerun y %macro
Se pueden ejecutar varias entradas anteriores mediante el uso de las funciones mágicas %rerun y %macro.
: %rerun 1-4 # ejecutar entradas de la 1 a la 4
: %rerun 4 # ejecutar entrada número 4
: %macro calcula 1-4 1-2 # crear macro "calcula" con entradas 1 a 4 y 1 a 2
: calcula # ejecutará la macro
: print(calcula) # mostrará el contenido de la macro "calcula"
Varias funciones mágicas pueden utilizar el historial de entrada: %edit, %rerun, %recall, %macro, %save y %pastebin.
Editar una entrada anterior con %recall o %rep
Con las funciones mágicas %recall o %rep podemos editar una entrada anterior antes de su ejecución.
In [10]: %recall 1 # Editar la entrada número 1
In [10]: 1 + 3 | # Una vez modificada aceptar los cambios con [Enter]
La base de datos del historial
El historial se guarda en una base de datos del tipo sqlite que podemos explorar con herramientas como SQLite Database Browser o SQLite Manager.
Para conocer la ubicación de la base de datos del historial:
In [11]: get_ipython().history_manager.hist_file
Out[11]: '/home/usuario/.ipython/profile_default/history.sqlite'