Bildschirm in der Shell löschen


89

Nur eine kurze Frage:
Wie löscht man den Bildschirm in der Shell? Ich habe Wege gesehen wie:

import os
os.system('cls')

Dies öffnet nur das Windows-Cmd, löscht den Bildschirm und schließt, aber ich möchte, dass das Shell-Fenster gelöscht wird
(PS: Ich weiß nicht, dass dies hilft, aber ich verwende Version 3.3.2 von Python).
Danke :)


Antworten:


56

Unter macOS / OS X können Sie das Unterprozessmodul verwenden und 'cls' über die Shell aufrufen:

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

Ersetzen Sie die 2. Zeile durch: '0' wird oben im Fenster nicht angezeigt:

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

Für Linux müssen Sie den clsBefehl durch ersetzenclear

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

3
Ich verwende Mac OS X und habe dies versucht, import subprocess as sp sp.call('clear',shell=True)was funktioniert, außer dass sich 0oben im Terminalfenster eine befindet.
Daniel Dropik

0 ist der Rückgabewert des Befehlsaufrufs 'cls' von der Shell. Ich habe die Antwort bearbeitet, um dies ebenfalls zu beseitigen, indem ich diesen Wert einfach in einer Variablen gespeichert habe.
GalHai

9
Versuchen Sie diesctrl+L
Sai Ram

Das funktioniert in der Kommandozeile. Die Frage war, wie es in Python geht.
Edward Falk

Danke für die Lösung, mir fehlte shell = True. Um zu verhindern, dass die 0 angezeigt wird, können Sie am Ende der Anweisung auch ein Semikolon einfügen. sp.call('cls', shell=True);
Waylon Walker

86

Was ist mit der Verknüpfung CTRL+ L?

Es funktioniert für alle Shells, z. B. Python, Bash, MySQL, MATLAB usw.


1
US-Tastatur buchstabiert normalerweise cntrl als ctrl :)
Patrick

5
Funktioniert leider nicht unter Windows einschließlich des neuen cmd in Windows
10

63
import os

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

Auch os.system('clear')für Mac OS X-Terminals (bestätigt, dass sie mit der Standard-Shell funktionieren bash, und auch für csh).
Jvriesem

Sie können auch eine Funktion definieren, um dies auszuführen, z. B.: Def cls (): os.system ('cls') (drücken Sie zweimal die Eingabetaste). Dann können Sie einfach cls () eingeben, um den Bildschirm zu löschen.

Die Frage war, wie man das in der Shell macht.
Kyle Delaney

@KyleDelaney ist zwar ineffizient, funktioniert aber in der Shell. Auch viele Leute fanden das nützlich, weil sie danach suchten.
Gaspa79

12

Die Art von Dingen, nach denen Sie suchen, finden Sie im Curses-Modul.

dh

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

Wichtige Notiz

Wichtig ist, dass Sie vor jedem Beenden das Terminal auf einen normalen Modus zurücksetzen müssen. Dies kann mit den folgenden Zeilen erfolgen:

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

Wenn Sie dies nicht tun, werden Sie alle möglichen seltsamen Verhaltensweisen bekommen. Um dies sicherzustellen, würde ich empfehlen, das atexit-Modul zu verwenden, etwa:

import atexit

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

Wird wahrscheinlich gut tun.


Kannst du genauer sein?
Josh

1
Ich verwende Mac OS X 10.7.5 und iTerm 2 für mein Terminal. Mit Python2.7 wird der stdscr = curses.initscr()Bildschirm gelöscht und stdscr.clear()nichts getan . Mit Python3.4 wird der stdscr = curses.initscr()Bildschirm zwar gelöscht, die Fähigkeit des Terminals zur Verarbeitung von Zeilenumbrüchen wird jedoch beeinträchtigt. Wenn ich wiederholt die Eingabetaste drücke, wird Folgendes angezeigt: >>> >>> >>> >>> und so weiter. Ich kann immer noch Befehle eingeben, aber sie werden nicht angezeigt. Auch dieses Verhalten bleibt auch bei exit()Python bestehen. VERWENDUNG VERMEIDEN!
Jvriesem

@jvriesem Das Curses-Modul wird seit langer Zeit verwendet und von vielen Leuten verwendet. Ich würde vorschlagen, dass Sie sehen, ob Sie das Verhalten in einem kurzen Beispiel (etwa 20 Zeilen) und in einem der beiden Posts replizieren können es als Stapelüberlauffrage oder auf der Entwickler-Mailingliste.
Steve Barnes

Gute Idee - das ist eine bessere Antwort als meine "VERMEIDUNG VERWENDEN!" Aussage. Die ersten beiden Zeilen dieser Antwort waren die beiden Zeilen, die das Problem für mich wiederholen. Wissen Sie, ob es einen Grund gibt, warum das cursesModul Kompatibilitätsprobleme haben könnte (Windows vs. Mac vs. Linux)? Ich kann bestätigen, dass dieses Problem zumindest auf zwei verschiedenen Mac-Terminals auftritt. Das Verhalten bleibt in BASH bestehen, nicht jedoch in CSH. Hmm ... Denkst du, ich sollte den Fluchentwickler oder den Shell-Entwickler kontaktieren oder einfach die SO-Community fragen? Danke noch einmal!
Jvriesem

@jvriesem - Ich habe meine Antwort aktualisiert, um anzugeben, wie Sie Ihr Terminal nach Abschluss des Vorgangs in den Standardmodus zurücksetzen können, auch bei jedem Beenden.
Steve Barnes

12

Hier sind einige Optionen, die Sie unter Windows verwenden können

Erste Wahl:

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

>>> cls()

Zweite Option:

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

>>> cls()

Dritte Option, wenn Sie sich im Python REPL-Fenster befinden:

Ctrl+L

9

Es ist nicht nur eine rundum großartige CLI-Bibliothek, sondern clickbietet auch eine plattformunabhängige clear()Funktion:

import click
click.clear()

7

Diese Funktion funktioniert unter jedem Betriebssystem (Unix, Linux, MacOS und Windows)
Python 2 und 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 lautet der Befehl cls, in Unix-ähnlichen Systemen der Befehl clear.
platform.system()Gibt den Plattformnamen zurück. Ex. 'Darwin'für macOS.
subprocess.call()führt einen Systemaufruf durch. Ex.subprocess.call(['ls','-l'])


4

Wenn Sie ein Linux-Terminal verwenden, um auf Python zuzugreifen, ist cntrl + l die beste Lösung, um den Bildschirm zu löschen


4

Ich verwende eine Klasse, die nur eine der oben genannten Methoden hinter den Kulissen verwendet. Ich habe festgestellt, dass sie unter Windows und Linux funktioniert. Ich verwende sie jedoch gerne, weil es einfacher ist, clear () anstelle von system ('clear') einzugeben. ) oder os.system ('clear')

pip3 install clear-screen

from clear_screen import clear

und dann, wenn Sie die Shell löschen möchten:

clear()

3

Eine einfachere Möglichkeit, einen Bildschirm in Python zu löschen, ist die Verwendung von Ctrl+, Lobwohl dies sowohl für die Shell als auch für andere Programme funktioniert.


3

Mit Windows 10 und Pyhton3.5 habe ich viele Codes getestet und nichts hat mir mehr geholfen als dies:

Definieren Sie zunächst eine einfache Funktion. Diese Funktion druckt 50 Zeilenumbrüche. (Die Zahl 50 hängt davon ab, wie viele Zeilen Sie auf Ihrem Bildschirm sehen können, damit Sie diese Zahl ändern können.)

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

Rufen Sie es dann einfach so oft an, wie Sie möchten oder brauchen

cls()

Keine der fertig gebauten Befehlsideen hat für mich funktioniert. Dies zu schaffen, hat natürlich meine eigene Funktion getan.
DashingQuark

2

Command+K funktioniert gut in OSX, um den Bildschirm zu löschen.

Shift+Command+K um nur den Scrollback-Puffer zu löschen.



1

Mit dem Unterprozess können Sie "cls" für Shell aufrufen.

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

Das ist so einfach wie ich es machen kann. Hoffe es funktioniert bei dir!


1
  1. Sie können Windows- oder Linux-Betriebssysteme verwenden

    import os
    os.system('cls')
    os.system('clear')
  2. Sie können das Unterprozessmodul verwenden

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

1

os.system('cls')funktioniert gut, wenn ich sie öffne. Es wird im cmd-Stil geöffnet.


1

Anstatt alle Flüche zu importieren oder nur um ein Steuerzeichen zu erhalten, können Sie einfach (unter Linux / macOS) Folgendes verwenden:

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

(Quelle: Terminal in Python löschen )


0

Hier erfahren Sie, wie Sie Ihre eigenen erstellen clsoderclear Befehl Befehl erstellen, der funktioniert, ohne explizit eine Funktion aufzurufen!

Wir werden die Tatsache ausnutzen, dass die Python-Konsole aufruft repr(), um Objekte auf dem Bildschirm anzuzeigen. Dies ist besonders nützlich, wenn Sie über eine eigene angepasste Python-Shell verfügen ( -iz. B. mit der Option) und ein vorinstalliertes Skript dafür haben. Das brauchen Sie:

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

cls = ScreenCleaner()

Verwenden Sie clearanstelle von, clswenn Sie unter Linux sind (sowohl im osBefehl als auch im Variablennamen)!

Wenn Sie jetzt nur schreiben clsoder clearin die Konsole - es wird es löschen! Nicht einmal cls()oder clear()- nur die Rohvariable. Dies liegt daran, dass Python aufruft repr(cls), um es auszudrucken, was wiederum unsere __repr__Funktion auslöst .

Lassen Sie es uns testen:

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

Und der Bildschirm ist klar!

Zur Verdeutlichung muss der obige Code entweder wie folgt in die Konsole importiert werden

from somefile import cls

Oder direkt vorladen mit etwas wie:

python -i my_pre_loaded_classes.py

0

Das ist der beste Weg:

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

3
Ich sehe nicht wirklich, wie sich Ihre Antwort gegenüber den Antworten verbessert, die bereits in den vergangenen Jahren gegeben wurden.
David Buck

Diejenigen, die es brauchen, werden sehen. Ich habe keinen Verbesserungsbedarf, Bruder. Dank bro.
Fahimbd_14

2
Er sprach nicht davon, Ihre Antwort zu verbessern. Er erklärte, dass Ihre Antwort nicht nützlich sei, weil jemand anderes bereits dieselbe gegeben habe.
OmikronWeapon

0

Für Python IDLE 3.8.1 können Sie die Shell neu starten

STRG + F6

Im Menü Klicken Sie auf das Menü Shell. Klicken Sie dann auf die Option Shell neu starten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.