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 :)

Josh
fonte
possível duplicata de Como limpar o console do interpretador python?
Cees Timmerman

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)
GalHai
fonte
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.

Shafiq
fonte
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
Rajan Mandanka
fonte
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.

Steve Barnes
fonte
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
Vlad Bezden
fonte
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()
Martin Valgur
fonte
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'])

ePi272314
fonte
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.

BioinfoNerd
fonte
4

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

HMS
fonte
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()

fonte
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()
sami.almasagedi
fonte
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.

Ayer
fonte
1
import curses
stdscr = curses.initscr()
stdscr.clear()
sl1ng5h0t
fonte
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ê!

Seth Connell
fonte
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)
    
Rohit Parghi
fonte
1

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

Phich
fonte
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 )

CharlesL
fonte
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
Ofer Sadan
fonte
0

Essa é a melhor maneira:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()
Fahimbd_14
fonte
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.

Peter Cockram
fonte