quarta-feira, 25 de janeiro de 2012

Como limpar o console do Python no Windows

Demonstrando Python no telão, muitas vezes é bom limpar o console, para começar uma nova parte da demonstração no topo da tela. No Linux e no OSX é fácil: CTRL-L. Mas no Windows isso não funciona. No DOS existe o comando cls, mas como acioná-lo a partir do Python de modo conveniente?

Pesquisando na Web, achei uma conversa no StackOverflow (que Allah o proteja sempre!). Lá tem várias respostas mas a mais legal é este pequeno script:
class cls(object):
    def __repr__(self):
        import os
        os.system('cls' if os.name == 'nt' else 'clear')
        return ''

cls = cls()

Como usar

Depois de salvar este código em um script cls.py, há três maneiras de usá-lo. A primeira e mais simples é invocar o Python assim:
C:\Users\Luciano> python -i cls.py
Desta forma o Python executa o script, definindo a classe cls e criando uma variável global com o mesmo nome. Para limpar o console, basta digitar no prompt do Python:
>>> cls
Os únicos inconvenientes da abordagem acima são ter que lembrar de invocar o Python com a opção -i cls.py e um pequeno detalhe: o cabeçalho que indica a versão do Python é omitido com esta opção, e isso pode confundir.

Instalar como script de inicialização

Se quiser usar o pseudo-comando cls toda vez que rodar o Python, você pode usar esta dica do tutorial do Python: crie uma variável de ambiente no Windows chamada PYTHONSTARTUP e coloque nela o caminho completo até o arquivo cls.py. No meu caso, salvei o arquivo no diretório onde o Python para Windows já traz alguns scripts, e o caminho ficou assim:
C:\Users\Luciano> echo %PYTHONSTARTUP%
C:\Python27\Scripts\cls.py
Feito isso, o script cls.py será executado toda vez que você rodar o Python em modo interativo (mas não quando executar algum script).
A terceira forma de instalar o comando cls seria usando um módulo de customização, como explicado no Tutorial, mas não achei prática esta alternativa no Windows porque o caminho onde eu teria que criar o módulo não existe e, mesmo se criado, é de difícil acesso no Windows 7 (fica num lugar bizarro que tem AppData\Roaming no caminho).

Como funciona

A graça do script cls.py está em usar o método __repr__ para executar uma chamada ao SO para limpar a tela. O __repr__ serve para produzir uma string que representa o objeto de forma precisa, e é o que o Python usa para mostrar o valor de qualquer expressão no console interativo.

Ao criar uma instância da classe cls e atribuir esta instância à variável global com o mesmo nome, toda vez que digitamos cls no prompt, para exibir o valor desta variável o Python executa repr(cls) e isso invoca o nosso método cls.__repr__(). Uma solução simples e inteligente, usando um pouco de conhecimento sobre o modelo de objetos da linguagem.

6 comentários:

  1. Olá, Jucimara, você seguiu atentamente as instruções? Qual foi o passo que não funcionou para você? Exatamente qual foi o problema encontrado?

    ResponderExcluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Traceback (most recent call last):
    File "", line 1, in
    execfile ("C:/Users/Www/Desktop/cls.py")
    File "C:/Users/Www/Desktop/cls.py", line 1
    class cls(object):
    ^
    Eu não consegui...

    ResponderExcluir
  4. Não funcionou! Apareceu a seguinte mensagem: "SyntaxError: invalid syntax
    CLS
    Traceback (most recent call last):
    File "", line 1, in
    CLS
    NameError: name 'CLS' is not defined"

    ResponderExcluir