Como limpar o console no Python com Linux

Como limpar o console no Python com Linux

16 de abril de 2019 0 Por Ramos de Souza Janones

Esta dica ensina as diversas formas de limpar o console no Python, utilizando o Linux.

Simplesmente pressione ctrl + L (funciona no shell também – você nem precisa escrever clear).

Isso no terminal. Em um programa, você pode simplesmente imprimir um número de linhas em branco maior que o tamanho do terminal: print("\n" * 130), ou, se estiver no Linux ou Mac, imprimir a sequência ANSI que apaga a tela: print("\x1b[2J"). Veja mais detalhes abaixo.

O CTRL + L limpa a tela se você estiver no terminal de algum Linux – e talvez um ou outro dos ambientes interativos do Windows – mas não no Idle, e outros prompts do Python integrados a IDE’s – e certamente não é apropriado se você desejar apagar a tela de dentro de um programa (você não pode pedir ao usuário para digitar “ctrl + L” para apagar a tela 🙂 )

Leia também: Os 10 livros de tecnologia mais vendidos no primeiro trimestre de 2019

A razão de não existir uma chamada de função simples,na biblioteca padrão do Python, é que as entradas e saídas padrão não são pensadas, numa linguagem de programação genérica, sempre como um “terminal” – elas representam um fluxo de dados de entrada, e dois de saída (stdout e stderr). Mas a linguagem em si “não sabe” que está rodando no terminal quando algum programa é executado. Para programas feitos específicamente para o terminal que queiram uma interação mais sofisticada (inclusive com o mouse), a biblioteca padrão do Python inclui o módulo curses (veja abaixo).

A solução chamando o comando externo – seja o cls no windows ou clear no Linux/Mac OS, com o os.system funciona -mas tem um problema básico: é um programa externo – todo um processo externo no sistema operacional, achar o arquivo no disco, criar o processo, para fazer uma chamada de API ao terminal. Em termos de usos de recursos é o mesmo que chamar um chaveiro para abrir e trancar a porta de novo cada vez que for sair de casa.

Bom – esses programas para “apagar a tela” – tanto o clear do Unix quanto o “cls” do DOS, quanto o “clear” e o próprio o próprio CTRL + L, não fazem muito mais do que simplesmente imprimir várias linhas em branco, de forma que o conteúdo da tela atual role pra cima.

Para fazer isso em Python, basta imprimir uma única string com um número suficiente de “linefeeds” (o caractere representado por ‘\n’ – cujo código em decimal é “10”).

Um pouco mais chato é saber o número exato de linefeeds necessário para apagar a tela exatamente e sem linefeeds a mais. Se isso não for uma preocupação, um número como 130 linhas em branco é mais que suficiente para rolar um terminal em full HD com fonte em tamanho 4 – então simplesmente:

print ("\n" * 130) 

Garantidamente vai te apagar qualquer terminal, independente do tipo de S.O. sem precisar executar um outro processo fora do interpretador Python só para isso.

Claro que é mais elegante imprimir um número de linhas em branco só igual ao número de linhas do terminal – e não mais que isso. Entre outras coisas, um usuário acostumado ao uso do terminal pode esperar poder rolar a tela para cima para ver a tela anterior nas linhas imediatamente precedentes à primeira linha da tela em branco (embora o comando clear resete esse histórico também).

Para isso, a partir do Python 3.3, há a função get_terminal_size no módulo OS do Python. Para quem está escrevendo um programa que vai funcionar em várias versões do Python, a funcionalidade pode ficar encapsulada numa função do tipo:

def clear():
    try:
        import os
        lines = os.get_terminal_size().lines
    except AttributeError:
        lines = 130
    print("\n" * lines)

Mas no Python 3.3 ou acima, basta fazer:

import os
print("\n" * os.get_terminal_size().lines)

Além disso, nos Unixes, e talvez em alguns programas de terminal/prompt do Windows, são reconhecidas as “sequências ANSI” – isso é, o próprio terminal reconhece sequências especiais de caracteres que representam comandos tais como limpar a tela, alterar a cor da fonte, posicionar o cursor -etc – São um “brinquedo” bem interessante – e bem mais simples que o módulo curses do Python(do qual falo abaixo). Para apagar a tela em qualquer terminal Linux ou na maior parte dos Unixes (não sei se no Mac OS X funciona direto) – basta imprimir a sequência “\x1b[2J” – (o “\x1b” é o caractére <ESC> o mesmo código que é gerado pela tecla com esse nome). A sequência <ESC>[ inicia várias sequências ANSI. Para ver as sequências exatas suportadas pelo seu terminal, execute o comando infocmp no shell.

Por essa técnica, apagar a tela, e posicionar o cursor na primeira linha e primeira coluna pode ser feito assim:

print("\x1b[2J\x1b[1;1H")

(O comando print imprime por padrão um “\n” – se estiver no Python 3 use print("\x1b[2J\x1b[1;1H", end="") para evitar ir parar na segunda linha – em Python2, vale a pena colocar um from __future__ import print_function no começo do arquivo e fazer o mesmo.)

Lembrando que – e pelo que entendi do contexto dessa pergunta – se a idéia é só apagar a tela enquando se está no modo interativo do Python – nesse caso, o “ctrl + L” vai servir bem.

Para quem quiser fazer um programa complexo com interação pelo terminal, minha dica sempre é a seguinte: se voê está nesse ponto, é hora de pensar em fugir do terminal. Python permite interação com várias bibliotecas gráficas para criação de um aplicativo em uma janela própria – que é muito mais confortável para o usuário final. Usuários acostumados com interface de linha de comando estarão felizes com chamar o programa da linha de comando do sistema, passando opções diretamente na mesma – para isso consulte o módulo argparse da biblioteca padrão.

Se mesmo assim se o autor preferir criar uma interface interativa no terminal, a dica é usar o módulo curses – também da biblioteca padrão – com ele você obtem um objeto do tipo “janela” (de texto) no terminal, onde pode posicionar o cursor em lugares exatos, apagar a tela, mudar cores, etc… E com algum trabalho (não pouco) poderá fazer um aplicativo com uma carinha realmente profissional – desde os usuários desse programa estejam congelados no tempo desde a década de 1990. Se não for esse o objetivo, apagar a tela com o print("\n" * 130) é o suficiente.

Com curses, você pode apagar a tela fazendo:

import curses
window = curses.initscr()
window.clear()
window.refresh()

No entanto o terminal estará nesse modo de “aplicação” em que “print” e “input” podem ter resultados diferentes do que acontece num terminal normal. Em particular, é importante posicionar o cursor na posição desejada da tela antes de cada impressão chamando a função window.move(line, col) . Ao encerrar o programa, é vital retornar o terminal para o estado normal, chamando a função curses.endwin().

Powered by Rock Convert

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.

Últimos posts por Ramos de Souza Janones (exibir todos)

Sumário
Como limpar o console no Python com Linux
Nome do artigo
Como limpar o console no Python com Linux
Descrição
Esta dica ensina as diversas formas de limpar o console no Python, utilizando o Linux.
Autor
Nome
Ramos da Informática
Logo