Schermo chiaro nella shell


90

Solo una domanda veloce:
come si cancella lo schermo nella shell? Ho visto modi come:

import os
os.system('cls')

Questo apre solo il cmd di Windows, cancella lo schermo e si chiude ma voglio che la finestra della shell venga cancellata
(PS: non so che questo aiuta, ma sto usando la versione 3.3.2 di Python)
Grazie :)


Risposte:


57

Per macOS / OS X, puoi utilizzare il modulo sottoprocesso e chiamare "cls" dalla shell:

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

Per evitare che "0" venga visualizzato nella parte superiore della finestra, sostituire la seconda riga con:

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

Per Linux, è necessario sostituire il clscomando conclear

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

3
Sto usando Mac OS X e ho provato questo import subprocess as sp sp.call('clear',shell=True)che funziona, tranne per il fatto che c'è un 0nella parte superiore della finestra del terminale.
Daniel Dropik

0 è il valore di ritorno della chiamata al comando "cls" dalla shell. ho modificato la risposta per sbarazzarmi anche di quello, semplicemente memorizzando quel valore in una variabile.
GalHai

9
Prova questoctrl+L
Sai Ram

Funziona sulla riga di comando. La domanda era come farlo in Python.
Edward Falk

Grazie per la soluzione, mi mancava shell = True. per evitare che lo 0 venga visualizzato puoi anche aggiungere un punto e virgola alla fine dell'istruzione. sp.call('cls', shell=True);
Waylon Walker

84

E la scorciatoia CTRL+ L?

Funziona con tutte le shell, ad esempio Python, Bash, MySQL, MATLAB, ecc.


6
Purtroppo non funziona su Windows compreso il nuovo cmd in Windows10
9a3eedi

Quando si utilizza un sottoprocesso per l'automazione, questo approccio non funziona.
mountainLion

64
import os

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

Inoltre, os.system('clear')per i terminali Mac OS X (confermato per funzionare con la shell predefinita bash, e anche per csh).
jvriesem

Puoi anche definire una funzione per eseguirlo, come: def cls (): os.system ('cls') (premi invio due volte). Quindi puoi semplicemente digitare cls () per cancellare lo schermo.

La domanda era su come farlo nella shell.
Kyle Delaney

1
@KyleDelaney sebbene inefficiente, funziona nella shell. Inoltre molte persone lo hanno trovato utile perché è quello che stavano cercando.
Gaspa79

12

Il tipo di cosa che stai cercando si trova nel modulo curses.

cioè

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

Nota importante

La cosa importante da ricordare è prima di qualsiasi uscita, è necessario ripristinare il terminale in modalità normale, questo può essere fatto con le seguenti righe:

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

Se non lo fai, otterrai ogni sorta di strano comportamento. Per assicurarti che ciò sia sempre fatto, suggerirei di utilizzare il modulo atexit, qualcosa come:

import atexit

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

Probabilmente andrà bene.


Può essere più preciso?
josh

1
Uso Mac OS X 10.7.5 e iTerm 2 per il mio terminale. Usando Python2.7, stdscr = curses.initscr()funziona per cancellare lo schermo e stdscr.clear()non fa nulla. Usando Python3.4, stdscr = curses.initscr()cancella lo schermo, ma toglie la capacità del terminale di elaborare le nuove righe. Quando premo ripetutamente Invio, viene visualizzato quanto segue: >>> >>> >>> >>> e così via. Posso ancora digitare i comandi, ma non vengono visualizzati. Inoltre, questo comportamento persiste anche quando exit()utilizzo Python. EVITARE L'USO!
jvriesem

@jvriesem il modulo curses è in uso da molto tempo ed è stato utilizzato da molte persone - ti suggerirei di vedere se puoi replicare il comportamento in un breve, (20 righe circa), esempio e in entrambi i post come domanda di overflow dello stack o nella mailing list degli sviluppatori.
Steve Barnes

Buona idea: è una risposta migliore del mio "EVITARE L'USO!" dichiarazione. Le prime due righe di questa risposta erano le due righe che replicano il problema per me. Sai se c'è qualche motivo per cui il cursesmodulo potrebbe avere problemi di compatibilità (Windows vs Mac vs Linux)? Posso confermare che questo problema si verifica su due diversi terminali Mac, almeno. Il comportamento persiste in BASH ma non CSH. Hmm ... Pensi che dovrei contattare lo sviluppatore di curses, lo sviluppatore della shell o semplicemente chiedere alla comunità SO? Grazie ancora!
jvriesem

@jvriesem - Ho aggiornato la mia risposta per includere come ripristinare il terminale in modalità standard una volta terminato, anche su qualsiasi uscita.
Steve Barnes

12

Ecco alcune opzioni che puoi utilizzare su Windows

Prima opzione:

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

>>> cls()

Seconda opzione:

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

>>> cls()

Terza opzione se sei nella finestra REPL di Python:

Ctrl+L

9

Oltre ad essere una fantastica libreria CLI a tutto tondo, clickfornisce anche una clear()funzione indipendente dalla piattaforma :

import click
click.clear()

7

Questa funzione funziona in qualsiasi sistema operativo (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

In Windows il comando è cls, in sistemi unix-like il comando è clear.
platform.system()restituisce il nome della piattaforma. Ex. 'Darwin'per macOS.
subprocess.call()esegue una chiamata di sistema. Ex.subprocess.call(['ls','-l'])


6

Un modo più semplice per cancellare uno schermo mentre si è in python è usare Ctrl+ Lsebbene funzioni per la shell e per altri programmi.


4

Se stai usando il terminale linux per accedere a python, cntrl + l è la soluzione migliore per cancellare lo schermo


4

Sto usando una classe che usa solo uno dei metodi di cui sopra dietro le quinte ... Ho notato che funziona su Windows e Linux ... Mi piace usarla perché è più facile digitare clear () invece di system ('clear' ) o os.system ('clear')

pip3 install clear-screen

from clear_screen import clear

e poi quando vuoi cancellare la shell:

clear()

3

utilizzando Windows 10 e pyhton3.5 ho testato molti codici e niente mi ha aiutato più di questo:

Definisci prima una semplice funzione, questa funzione stamperà 50 nuove righe; (il numero 50 dipenderà da quante righe puoi vedere sullo schermo, quindi puoi cambiare questo numero)

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

quindi chiamalo tutte le volte che vuoi o hai bisogno

cls()

Nessuna delle idee di comando già pronte ha funzionato per me. creando questo, ovviamente lo ha fatto la mia funzione.
DashingQuark

2

Command+K funziona bene in OSX per cancellare lo schermo.

Shift+Command+K per cancellare solo il buffer di scorrimento indietro.



1

Subprocess ti permette di chiamare "cls" per Shell.

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

È il più semplice possibile. Spero che funzioni per te!


1
  1. puoi usare Windows o Linux Os

    import os
    os.system('cls')
    os.system('clear')
    
  2. puoi usare il modulo sottoprocesso

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

1

os.system('cls')funziona bene quando li apro. Si apre in stile cmd.


1

Invece di importare tutte le maledizioni o sborsare solo per ottenere un carattere di controllo, puoi semplicemente usare (su Linux / macOS):

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

(Fonte: Cancella terminale in Python )


0

Ecco come fare il vostro molto proprio clsoclear comando comando che funzionerà senza chiamare esplicitamente alcuna funzione!

Approfitteremo del fatto che la console python chiama repr()per visualizzare gli oggetti sullo schermo. Ciò è particolarmente utile se hai la tua shell python personalizzata (con l' -iopzione per esempio) e hai uno script di precaricamento per essa. Questo è quello di cui hai bisogno:

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

cls = ScreenCleaner()

Usa clearinvece di clsse sei su Linux (sia nel oscomando che nel nome della variabile)!

Ora se scrivi clso clearnella console, lo cancellerà! Nemmeno cls()o clear()- solo la variabile grezza. Questo perché python chiamerà repr(cls)per stamparlo, il che a sua volta attiverà il nostro__repr__ funzione.

Proviamolo:

>>> 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 lo schermo è chiaro!

Per chiarire, il codice sopra deve essere importato nella console in questo modo

from somefile import cls

Oppure precarica direttamente con qualcosa come:

python -i my_pre_loaded_classes.py

0

È il modo migliore:

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

3
Non vedo davvero come la tua risposta migliori rispetto a nessuna delle risposte già fornite negli anni precedenti.
David Buck,

Chi ne ha bisogno vedrà. Non ho bisogno di miglioramenti, fratello. grazie, fratello.
Fahimbd_14

2
non stava parlando di migliorare la tua risposta. Ha affermato che la tua risposta non è utile, perché qualcun altro ha già dato la stessa.
OmikronWeapon

0

Per Python IDLE 3.8.1 puoi riavviare la Shell

CTRL + F6

Nel menu Fare clic sul menu Shell. Quindi fare clic sull'opzione Riavvia Shell.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.