Limpar a tela no shell


90

Apenas uma pergunta rápida:
como você limpa a tela no shell? Eu vi maneiras como:

import os
os.system('cls')

Isso apenas abre o cmd do windows, limpa a tela e fecha, mas eu quero que a janela do shell seja limpa
(PS: Não sei se isso ajuda, mas estou usando a versão 3.3.2 do Python)
Obrigado :)


Respostas:


57

Para macOS / OS X, você pode usar o módulo de subprocesso e chamar 'cls' do shell:

import subprocess as sp
sp.call('cls', shell=True)

Para evitar que '0' apareça no topo da janela, substitua a 2ª linha por:

tmp = sp.call('cls', shell=True)

Para Linux, você deve substituir o clscomando porclear

tmp = sp.call('clear', shell=True)

3
Estou usando o Mac OS X e tentei fazer isso import subprocess as sp sp.call('clear',shell=True)que funciona, exceto que há um 0na parte superior da janela do terminal.
— Daniel Dropik

0 é o valor de retorno da chamada do comando 'cls' do shell. Eu editei a resposta para me livrar disso também, simplesmente armazenando aquele valor em uma variável.
— GalHai

9
Experimente istoctrl+L
— Sai Ram

Isso funciona na linha de comando. A questão era como fazer isso em Python.
— Edward Falk

Obrigado pela solução, estava faltando shell = True. para evitar que o 0 apareça, você também pode adicionar um ponto-e-vírgula ao final da instrução. sp.call('cls', shell=True);
— Waylon Walker de

85

E o atalho CTRL+ L?

Funciona com todos os shells, por exemplo, Python, Bash, MySQL, MATLAB, etc.


8
Infelizmente não funciona no Windows, incluindo o novo cmd no Windows10
— 9a3eedi

Ao usar o subprocesso para automação, essa abordagem não funciona.
— mountainLion

64
import os

os.system('cls')  # For Windows
os.system('clear')  # For Linux/OS X

Além disso, os.system('clear')para terminais Mac OS X (confirmado para funcionar com o shell padrão bash, e também para csh).
— jvriesem

Você também pode definir uma função para executar isso, como: def cls (): os.system ('cls') (pressione Enter duas vezes). Em seguida, você pode simplesmente digitar cls () para limpar a tela.

A questão era como fazer isso no shell.
— Kyle Delaney

1
@KyleDelaney embora ineficiente, funciona no shell. Além disso, muitas pessoas acharam isso útil porque era o que estavam procurando.
— Gaspa79

12

O tipo de coisa que você está procurando pode ser encontrado no módulo curses.

ie

import curses  # Get the module
stdscr = curses.initscr()  # initialise it
stdscr.clear()  # Clear the screen

Nota importante

O importante a lembrar é que antes de qualquer saída, você precisa redefinir o terminal para o modo normal, isso pode ser feito com as seguintes linhas:

curses.nocbreak()
stdscr.keypad(0)
curses.echo()
curses.endwin()

Do contrário, você terá todo tipo de comportamento estranho. Para garantir que isso sempre seja feito, eu sugeriria usar o módulo atexit, algo como:

import atexit

@atexit.register
def goodbye():
    """ Reset terminal from curses mode on exit """
    curses.nocbreak()
    if stdscr:
        stdscr.keypad(0)
    curses.echo()
    curses.endwin()

Provavelmente servirá bem.


Você pode ser mais específico?
— Josh

1
Estou executando o Mac OS X 10.7.5 e o iTerm 2 para meu terminal. Usando Python 2.7, ele stdscr = curses.initscr()funciona para limpar a tela e stdscr.clear()não faz nada. Usando Python3.4, o stdscr = curses.initscr()limpa a tela, mas tira a capacidade do terminal de processar novas linhas. Quando pressiono enter repetidamente, ocorre o seguinte: >>> >>> >>> >>> e assim por diante. Ainda consigo digitar comandos, mas eles não aparecem. Além disso, esse comportamento persiste mesmo quando eu uso o exit()Python. EVITE O USO!
— jvriesem

@jvriesem o módulo curses está em uso há muito tempo e tem sido usado por muitas pessoas - eu sugiro que você veja se você pode replicar o comportamento em um curto, (20 linhas ou mais), exemplo e qualquer postagem como uma questão de estouro de pilha ou na lista de discussão do desenvolvedor.
— Steve Barnes

Boa ideia - é uma resposta melhor do que o meu "EVITAR O USO!" declaração. As primeiras duas linhas desta resposta foram as duas linhas que replicam o problema para mim. Você sabe se há algum motivo para o cursesmódulo ter problemas de compatibilidade (Windows x Mac x Linux)? Posso confirmar que esse problema ocorre em dois terminais Mac diferentes, pelo menos. O comportamento persiste no BASH, mas não no CSH. Hmm .... Você acha que eu deveria entrar em contato com o desenvolvedor do curses, o desenvolvedor do shell ou apenas perguntar à comunidade SO? Obrigado novamente!
— jvriesem

@jvriesem - Eu atualizei minha resposta para incluir como redefinir seu terminal para o modo padrão depois de terminar, incluindo em qualquer saída.
— Steve Barnes

12

Aqui estão algumas opções que você pode usar no Windows

Primeira opção:

import os
cls = lambda: os.system('cls')

>>> cls()

Segunda opçao:

cls = lambda: print('\n' * 100)

>>> cls()

Terceira opção se você estiver na janela Python REPL:

Ctrl+L

9

Além de ser uma ótima biblioteca CLI versátil, clicktambém oferece uma clear()função independente de plataforma :

import click
click.clear()

7

Esta função funciona em qualquer sistema operacional (Unix, Linux, macOS e Windows)
Python 2 e Python 3

import platform    # For getting the operating system name
import subprocess  # For executing a shell command

def clear_screen():
    """
    Clears the terminal screen.
    """

    # Clear command as function of OS
    command = "cls" if platform.system().lower()=="windows" else "clear"

    # Action
    return subprocess.call(command) == 0

No Windows, o comando é cls; em sistemas do tipo Unix, o comando é clear.
platform.system()retorna o nome da plataforma. Ex. 'Darwin'para macOS.
subprocess.call()executa uma chamada de sistema. Ex.subprocess.call(['ls','-l'])


6

Uma maneira mais fácil de limpar uma tela em python é usar Ctrl+, Lembora funcione para o shell e também para outros programas.


4

Se você estiver usando um terminal linux para acessar python, então cntrl + l é a melhor solução para limpar a tela


4

Estou usando uma classe que usa apenas um dos métodos acima nos bastidores ... percebi que funciona no Windows e no Linux ... mas gosto de usá-la porque é mais fácil digitar clear () em vez de system ('clear' ) ou os.system ('limpar')

pip3 install clear-screen

from clear_screen import clear

e então quando você quiser limpar a casca:

clear()

3

usando windows 10 e pyhton3.5 eu testei muitos códigos e nada me ajudou mais do que isso:

Primeiro defina uma função simples, esta função imprimirá 50 novas linhas; (o número 50 dependerá de quantas linhas você pode ver na tela, então você pode alterar este número)

def cls(): print ("\n" * 50)

em seguida, basta chamá-lo quantas vezes quiser ou precisar

cls()

Nenhuma das idéias de comando já construídas funcionou para mim. criando isso, minha própria função, é claro.
— DashingQuark

2

Command+K funciona bem no OSX para limpar a tela.

Shift+Command+K para limpar apenas o buffer de rolagem.



1

O subprocesso permite que você chame "cls" para Shell.

import subprocess
cls = subprocess.call('cls',shell=True)

Isso é o mais simples que posso fazer. Espero que funcione para você!


1
  1. você pode usar o Windows ou Linux OS

    import os
    os.system('cls')
    os.system('clear')
    
  2. você pode usar o módulo de subprocesso

    import subprocess as sp
    x=sp.call('cls',shell=True)
    

1

os.system('cls')funciona bem quando eu os abro. Ele abre no estilo cmd.


1

Em vez de importar todas as maldições ou gastar apenas para obter um caractere de controle, você pode simplesmente usar (no Linux / macOS):

print(chr(27) + "[2J")

(Fonte: Limpar terminal em Python )


0

Veja como criar seu próprio comando clsou clearque funcione sem chamar explicitamente nenhuma função!

Tiraremos vantagem do fato de que o console do Python chama repr()para exibir objetos na tela. Isso é especialmente útil se você tiver seu próprio shell Python personalizado (com a -iopção, por exemplo) e tiver um script de pré-carregamento para ele. Isto é o que você precisa:

import os
class ScreenCleaner:
    def __repr__(self):
        os.system('cls')  # This actually clears the screen
        return ''  # Because that's what repr() likes

cls = ScreenCleaner()

Use em clearvez de clsse você estiver no Linux (tanto no oscomando quanto no nome da variável)!

Agora, se você apenas escrever clsou clearno console - ele irá limpar! Nem mesmo cls()ou clear()- apenas a variável bruta. Isso ocorre porque o python chamará repr(cls)para imprimi-lo, o que por sua vez acionará nossa __repr__função.

Vamos testar:

>>> df;sag
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'df' is not defined
>>> sglknas
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sglknas' is not defined
>>> lksnldn
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'lksnldn' is not defined
>>> cls

E a tela está limpa!

Para esclarecer - o código acima precisa ser importado no console como este

from somefile import cls

Ou pré-carregue diretamente com algo como:

python -i my_pre_loaded_classes.py

0

Essa é a melhor maneira:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()

3
Eu realmente não vejo como sua resposta melhora em qualquer uma das respostas já dadas em anos anteriores.
— David Buck

Aqueles que precisam verão. Não tenho necessidade de melhorar mano. obrigado, mano.
— Fahimbd_14

2
ele não estava falando sobre melhorar sua resposta. Ele afirmou que a sua resposta não é útil, porque outra pessoa já deu a mesma.
— OmikronWeapon

0

Para o Python IDLE 3.8.1, você pode reiniciar o Shell

CTRL + F6

No menu Clique no menu Shell. Em seguida, clique na opção Reiniciar Shell.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.