Histórico de comandos no shell Python

Dando sequência ao post anterior, vamos a algumas modificações no arquivo de configurações .pythonrc para que possamos habilitar, além da completação por tab, também a gravação e recuperação do histórico de comandos digitados em sessões anteriores. Tal recurso permite que, ao abrirmos uma nova sessão de um shell Python, possamos recuperar a lista de comandos executados nas sessões anteriores, através da tecla up arrow (seta para cima).

import os
import atexit
import readline
import rlcompleter
history = os.path.expanduser('~/.python_history')
readline.read_history_file(history)
readline.parse_and_bind('tab: complete')
atexit.register(readline.write_history_file, history)

Modifique seu arquivo .pythonrc para que fique como o trecho de código acima¹. As linhas em vermelho são as linhas que foram inseridas no arquivo de configuração apresentado no post anterior. Dessa forma, seu histórico de comandos digitados no shell python será gravado no arquivo /home/nome_usuário/.python_history, sempre que você sair do shell Python.

Nota: Só pra lembrar que nesse ponto você deve ter configurado a variável de ambiente PYTHONSTARTUP para carregar o arquivo de configuração, adicionando no seu ~/.bashrc a linha:
export PYTHONSTARTUP=~/.pythonrc

Até aí, tudo OK. Mas e como isso funciona? O que significam as linhas de código que você vai inserir em seu arquivo de configurações do Python? Abaixo segue uma lista, linha por linha, explicando brevemente o que o código acima faz:

  1. Importa o módulo os
  2. Importa o módulo atexit
  3. Importa o módulo readline
  4. Importa o módulo rlcompleter
  5. Expande o nome de arquivo de ‘~/.python_history’ para ‘/home/nome_usuário/.python_history’ e grava isso na variável history
  6. Lê o arquivo de histórico cujo nome foi obtido na linha anterior
  7. Faz a ligação da tecla TAB com a função de completação
  8. Registra a função de gravação do arquivo de histórico para que seja executada sempre que o shell python for finalizado

Pronto, é isso. Agora faça o teste, abra um shell python, digite alguns comandos e feche. Abra novamente o shell python e pressione a tecla seta para cima e verifique se os comandos foram armazenados no histórico. Edit: caso o arquivo ~/.python_history não exista, ocorrerá um erro ao abrir o shell Python. Isso pode ser solucionado criando o arquivo vazio antes (touch ~/.python_history).

¹ Baseado no arquivo de configurações apresentado em: http://valueerror.wordpress.com/2009/11/03/python-shell-history-autocompletion-and-rc-file/

Completação por tab no shell interativo

Algo muito útil para quando estamos testando e estudando código Python, é termos um shell interativo que nos forneça completação de nomes de funções/atributos dos módulos/tipos disponíveis em Python. Qual a utilidade disso?

  1. Possibilita que lembremos daquela funçãozinha cujo nome esquecemos por falta de prática
  2. Auxilia no estudo, pois é possível conhecermos novas funções existentes nos módulos fornecidos juntamente com o Python, que muitas vezes facilitam várias tarefas em nossos programas

Bom, vamos ao que interessa. Abra em seu editor de textos o arquivo /home/nome_usuário/.pythonrc e cole o seguinte conteúdo dentro deste arquivo. Caso o arquivo não exista, não hesite em criá-lo!

import readline, rlcompleter
readline.parse_and_bind('tab: complete')
del readline, rlcompleter

Por fim, é necessário que você configure sua variável de ambiente PYTHONSTARTUP para possuir como valor o caminho do arquivo .pythonrc. Para isso, coloque em seu arquivo .bashrc o seguinte comando:

export PYTHONSTARTUP=~/.pythonrc

Após isso, abra um shell interativo python e faça um teste (<TAB> significa que você deve pressionar a tecla tab do seu teclado):

import string
string.<TAB><TAB>

Pronto, o shell Python deverá lhe mostrar várias opções de funções disponíveis no módulo string. A Figura 1 apresenta o shell python oferecendo opções de completação para o módulo atexit.

Completação no Shell Python

Figura 1. Completação no Shell Python