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

Josh
quelle
Mögliches Duplikat von Wie lösche ich die Python-Interpreter-Konsole?
Cees Timmerman

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

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

Steve Barnes
quelle
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
Vlad Bezden
quelle
9

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

import click
click.clear()
Martin Valgur
quelle
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'])

ePi272314
quelle
4

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

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

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

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

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

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

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

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

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

Das ist der beste Weg:

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

Peter Cockram
quelle