Wie lösche ich die Dolmetscherkonsole?

324

Wie die meisten Python-Entwickler lasse ich normalerweise ein Konsolenfenster geöffnet, in dem der Python-Interpreter ausgeführt wird, um Befehle, dir()Dinge help() stuffusw. zu testen .

Wie bei jeder Konsole wird der sichtbare Rückstand früherer Befehle und Ausdrucke nach einer Weile unübersichtlich und manchmal verwirrend, wenn derselbe Befehl mehrmals ausgeführt wird. Ich frage mich, ob und wie die Python-Interpreter-Konsole gelöscht werden soll.

Ich habe von einem Systemaufruf gehört und entweder clsunter Windows oder clearLinux, aber ich hatte gehofft, dass ich dem Interpreter selbst befehlen könnte, etwas zu tun.

Hinweis: Ich verwende Windows, Ctrl+Lfunktioniert also nicht.

Soviut
quelle
IPython-Lösung hier: stackoverflow.com/questions/6892191/…
onewhaleid
Ich bin überrascht, dass niemand es erwähnt hat. Aber wenn Sie die Ipython-Shell verwenden, können Sie Strg + L auch unter Windows
ausführen

Antworten:

441

Wie Sie bereits erwähnt haben, können Sie einen Systemaufruf ausführen:

Für Windows

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

Für Linux wird das Lambda

>>> clear = lambda: os.system('clear')
Ryan Duffield
quelle
1
Diese Antwort kommt dem „Geist“ dessen, wonach ich gefragt habe, am nächsten, danke.
Soviut
1
+1, nette Antwort. Gibt es eine Möglichkeit, den Rückgabewert so zu verwenden, dass er nicht angezeigt wird? Ich bekomme eine '0', nachdem ich klar gelaufen bin.
Technomalogical
15
Definieren Sie es in einer regulären Funktion anstelle von Lambda. Es sollte nicht '0' angezeigt werden, da der Rückgabewert None ist.
Akbar ibrahim
46
Was ist falsch an der Verwendung def? Warum ein verwenden, lambdawenn a defklarer ist?
S.Lott
17
@ Akbaribrahim als Keine wird nicht gedruckt versuchen Sie dies:clear = lambda: os.system('cls') or None
Enpenax
193

hier etwas handliches, das etwas plattformübergreifender ist

import os

def cls():
    os.system('cls' if os.name=='nt' else 'clear')

# now, to clear the screen
cls()
popcnt
quelle
Kombinieren Sie dies mit dem obigen Lambda-Vorschlag, um eine Codezeile zu speichern, die praktisch ist! Vielen Dank! :)
Torxed
import os os.system('cls')
Do Nhu Vy
1
TERM-Umgebungsvariable nicht festgelegt.
Jonathan
87

Hier ist ein kurzer Hack:

>>> clear = "\n" * 100
>>> print clear
>>> ...do some other stuff...
>>> print clear

Oder fügen Sie diese Datei in Ihren Python-Suchpfad ein, um einige Eingaben zu sparen:

# wiper.py
class Wipe(object):
    def __repr__(self):
        return '\n'*1000

wipe = Wipe()

Dann können Sie dies vom Dolmetscher aus tun, was Sie wollen :)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe
Triptychon
quelle
12
Haha, das ist ziemlich lustig. Nicht genau das, wonach ich gesucht habe, aber ein schöner Versuch.
Soviut
4
@Triptychon: c = "\ n" * 100 nützlich, +1 dafür. Ein kleiner Kommentar, den es löscht und an den unteren Rand der Shell bringt. Ich bevorzuge es, von oben zu beginnen.
Pythonbeginer
1
Oder, wenn Ihr Terminalemulator ANSI interpretiert, tun Sie besser:"\x1B[H\x1B[J"
Alba Mendez
8
Obwohl die Leute lachen, ist das Drucken vieler Zeilenumbrüche genau das, was die externen Prozesse tun clearund clstun. Dies ist der Weg, um es zu tun. (Nur ein Druck oder eine Funktion mit dem Druckaufruf, die natürlich keiner "klaren" Zeichenfolge zugeordnet ist)
jsbueno
4
@jsbueno nein ist es nicht. Nun, vielleicht unter Windows (obwohl ich es bezweifle, hat es APIs, um die Konsole zu löschen). Gibt auf allen anderen Systemen cleareine Anweisung aus, die den Bildschirm löscht. Ohne den Scrollback-Puffer zu verwerfen. Auf meinem System gibt es diese Steuersequenz aus : \33[3J\33[H\33[2J. Das heißt : [erase scrollback] [reset cursor position] [erase screen]. Das [erase scrollback]kann mit weggelassen werden clear -x.
Spektren
28

Obwohl dies eine ältere Frage ist, dachte ich, ich würde etwas beitragen, das die meiner Meinung nach besten der anderen Antworten zusammenfasst, und eine eigene Falte hinzufügen, indem ich vorschlage, dass Sie diese Befehle in eine Datei einfügen und Ihr PYTHONSTARTUP festlegen Umgebungsvariable, um darauf zu verweisen. Da ich im Moment unter Windows bin, ist es auf diese Weise leicht voreingenommen, könnte aber leicht in eine andere Richtung geneigt werden.

In den folgenden Artikeln wurde beschrieben, wie Umgebungsvariablen unter Windows festgelegt werden:
    Wann sys.path.append verwendet und% PYTHONPATH% geändert wird, reicht aus.
    Verwalten von Umgebungsvariablen in Windows XP
    Konfigurieren von System- und Benutzerumgebungsvariablen
    Verwenden von Global System Umgebungsvariablen in Windows

Übrigens, setzen Sie keine Anführungszeichen um den Pfad zur Datei, auch wenn sie Leerzeichen enthält.

Wie auch immer, hier ist meine Einstellung zum Code, der in das Python-Startskript eingefügt (oder zu Ihrem vorhandenen hinzugefügt) werden soll:

# ==== pythonstartup.py ====

# add something to clear the screen
class cls(object):
    def __repr__(self):
        import os
        os.system('cls' if os.name == 'nt' else 'clear')
        return ''

cls = cls()

# ==== end pythonstartup.py ====

Übrigens können Sie auch den __repr__ Trick von @ Triptych verwenden , um exit()in just zu wechseln exit(und das Gleiche gilt für den Alias quit):

class exit(object):
    exit = exit # original object
    def __repr__(self):
        self.exit() # call original
        return ''

quit = exit = exit()

Schließlich, hier ist etwas anderes , das die primäre Interpreter Aufforderung von Änderungen >>>zu cwd + >>>:

class Prompt:
    def __str__(self):
        import os
        return '%s >>> ' % os.getcwd()

import sys
sys.ps1 = Prompt()
del sys
del Prompt
Martineau
quelle
Dies ist wahrscheinlich die beste Antwort - eine Kombination von Techniken aus anderen Antworten. PYTHONSTARTUP + repr + os.system ('cls'). Sehr schön.
Triptychon
@Triptych: Ein interessanter Nebeneffekt bei der Verwendung __repr__und / oder auf __str__diese Weise ist, dass bei >>> vars()Eingabe an der Interpreter-Konsole alle so definierten Befehle ausgeführt werden. Auf meinem System wurde beispielsweise der Bildschirm gelöscht und die Konsole verlassen. Ich
brauchte
interessant. Ich sehe, dass dieses Problem auch für locals()und gilt globals(). Ein einfacher Dekorator um diese Funktionen, der den Namen löscht und ihn nach dem Aufrufen der Funktion neu zuweist, ist eine mögliche Lösung ...
Triptychon
@ Triptychon: Die Idee des Dekorateurs scheint nicht zu funktionieren, zumindest bei meinen eigenen Versuchen. Eine tragfähige Alternative zu finden, erweist sich als überraschend schwierig.
Martineau
Ich habe eine Kandidatenlösung, die einfach das Ergebnis von vars () globals () und local () -Aufrufen vorübergehend mungiert
Triptychon
28

Sie haben verschiedene Möglichkeiten, dies unter Windows zu tun:

1. Verwenden der Tastenkombination:

Press CTRL + L

2. Verwenden der Systemaufrufmethode:

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

3. 100-maliges Drucken neuer Zeilen:

cls = lambda: print('\n'*100)
cls()
Vlad Bezden
quelle
5
Alle diese Möglichkeiten sind hübsch ... naff. clsfunktioniert nur unter Windows und macht es Ihrem Programm schwer, plattformübergreifend zu sein. Das Drucken von 100 newlinesist nur ... eww? Und eine Tastenkombination wird im Programm nicht verwendet.
Luke
22

Der schnellste und einfachste Weg ist ohne Zweifel Ctrl+ L.

Dies gilt auch für OS X auf dem Terminal.

Alex K.
quelle
3
Ich habe diese Lösung mit Groß- oder Kleinbuchstaben "L" mit der Strg-Taste unter Windows 8.1 ausprobiert. Es funktioniert nicht bei mir. Ich öffne und schließe einfach das Shell-Fenster, um es zu löschen.
Chris22
2
Unter OS X wird das Terminal mit Strg + L aufgefüllt, bis die Anzeige klar ist. Sie können immer noch nach oben scrollen, um den Verlauf anzuzeigen. Verwenden Sie Cmd + K, um den Anzeige- und Ausdruckverlauf zu löschen. Eine vollständigere Liste der OS X-Terminal-Hotkeys
Andrew Franklin
2
Arbeite wunderbar für mich in Ubuntu Desktop 16
Nam G VU
15

Meine Art, dies zu tun, besteht darin, eine Funktion wie folgt zu schreiben:

import os
import subprocess

def clear():
    if os.name in ('nt','dos'):
        subprocess.call("cls")
    elif os.name in ('linux','osx','posix'):
        subprocess.call("clear")
    else:
        print("\n") * 120

Rufen Sie dann clear()an, um den Bildschirm zu löschen. Dies funktioniert unter Windows, OSX, Linux, BSD ... allen Betriebssystemen.

MartinUbuntu
quelle
Sie könnten meinen os.name in ('linux','osx')und möchten vielleicht auch hinzufügen 'posix'.
Rsanden
@rsanden 'linux' und 'osx' decken so ziemlich alle Leute ab, die das Betriebssystem tatsächlich benutzt.
MartinUbuntu
Ich verwende Ubuntu 15.04 und os.name == 'posix'sowohl in Python 2.7.9 als auch in 3.4.3
rsanden
@rsanden hinzugefügt posix.
MartinUbuntu
9

Hier ist ein plattformübergreifendes (Windows / Linux / Mac / Wahrscheinlich andere, das Sie in der if-Prüfung hinzufügen können) Versionsausschnitt, den ich erstellt habe, um die in dieser Frage gefundenen Informationen zu kombinieren:

import os
clear = lambda: os.system('cls' if os.name=='nt' else 'clear')
clear()

Gleiche Idee, aber mit einem Löffel syntaktischen Zuckers:

import subprocess   
clear = lambda: subprocess.call('cls||clear', shell=True)
clear()
Pitto
quelle
8

Wischer ist cool, gut daran ist, dass ich nicht '()' darum herum tippen muss. Hier gibt es leichte Abweichungen

# wiper.py
import os
class Cls(object):
    def __repr__(self):
        os.system('cls')
        return ''

Die Verwendung ist recht einfach:

>>> cls = Cls()
>>> cls # this will clear console.
Amol
quelle
2
Ich würde es nennen class cls.
Martineau
1
Ich würde nennen Sie die Instanz des class Clssein cls. cls = Cls()
Amol
Nur dass der ursprüngliche Namespace mit zwei Dingen verschmutzt wird, anstatt mit einem ... doppelt so viel.
Martineau
@Amol Ich habe Ihre und die Techniken anderer in meiner Lösung verwendet . Sie können class clsund dann tun cls=cls().
Alba Mendez
8

Dies ist das Einfachste, was Sie tun können, und es sind keine zusätzlichen Bibliotheken erforderlich. Der Bildschirm wird gelöscht und >>>in die obere linke Ecke zurückgekehrt.

print("\033[H\033[J")
Denis Rasulev
quelle
Dies hat den Vorteil, dass es auch in Spyder funktioniert.
Graham G
7

für den Mac-Benutzer innerhalb des Python-Konsolentyps

import os
os.system('clear')

für Windows

os.system('cls')
Yubaraj Poudel
quelle
5

Hier ist die endgültige Lösung , die alle anderen Antworten zusammenführt . Eigenschaften:

  1. Sie können den Code kopieren und in Ihre Shell oder Ihr Skript einfügen.
  2. Sie können es verwenden , wie Sie möchten:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. Sie können es als Modul importieren :

    >>> from clear import clear
    >>> -clear
  4. Sie können es als Skript aufrufen :

    $ python clear.py
  5. Es ist wirklich Multiplattform ; wenn es nicht Ihr System erkennen kann
    ( ce, nt, dosoder posix) wird es auf den Druck Leerzeilen zurückgreifen.


Sie können die [vollständige] Datei hier herunterladen: https://gist.github.com/3130325
Oder wenn Sie nur nach dem Code suchen:

class clear:
 def __call__(self):
  import os
  if os.name==('ce','nt','dos'): os.system('cls')
  elif os.name=='posix': os.system('clear')
  else: print('\n'*120)
 def __neg__(self): self()
 def __repr__(self):
  self();return ''

clear=clear()
Alba Mendez
quelle
5

Ich benutze iTerm und die native Terminal-App für Mac OS.

Ich drücke einfach ⌘ + k

Jorge E. Hernández
quelle
4

Leerlauf verwenden. Es hat viele praktische Funktionen. Ctrl+F6Setzt beispielsweise die Konsole zurück. Das Schließen und Öffnen der Konsole ist eine gute Möglichkeit, sie zu löschen.

S.Lott
quelle
Wie machst du das im Leerlauf? Einfach schließen und wieder öffnen?
Andrea Ambu
5
Nein, F6setzt die Idle-Konsole jedoch CTRL+F6nicht zurück. Leider wird der Bildschirm dadurch nicht gelöscht. D'oh! (Python Win32 Idle-Versionen 2.6.2, 2.7.1, 3.2).
Ridgerunner
4

Ich bin nicht sicher, ob die "Shell" von Windows dies unterstützt, aber unter Linux:

print "\033[2J"

https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes

Meiner Meinung clsnach osist es generell eine schlechte Idee, mit anzurufen. Stellen Sie sich vor, ich schaffe es, den Befehl cls oder clear auf Ihrem System zu ändern, und Sie führen Ihr Skript als Administrator oder Root aus.

Peter G. Marczis
quelle
Ich bin damit einverstanden, dass cls in diesem Fall nicht ideal ist und eine ANSI-Escape-Sequenz besser ist. Insbesondere die Verwendung von os zum Aufrufen eines neuen Prozesses ist eine recht teure Operation, verglichen mit dem Verschieben einiger Bytes nach stdout.
Silviot
2

Ich verwende MINGW / BASH unter Windows XP, SP3.

(kleben Sie dies in .pythonstartup)
# Meine Strg-L hat bereits funktioniert, aber dies könnte jemand anderem helfen
# die Eingabeaufforderung am unteren Rand des Fensters zu lassen ...
readline importieren
readline.parse_and_bind ('\ Cl: clear-screen')

# Dies funktioniert in BASH, weil ich es auch in .inputrc habe, aber aus irgendeinem
Grund wird es gelöscht, wenn ich in Python
readline.parse_and_bind gehe ('\ Cy: kill-ganze-Linie')


Ich konnte es nicht mehr ertragen, 'exit ()' zu tippen und war begeistert von Martineaus / Triptychons Tricks:

Ich habe es allerdings leicht behandelt (steckte es in .pythonstartup)

class exxxit():
    """Shortcut for exit() function, use 'x' now"""
    quit_now = exit # original object
    def __repr__(self):
        self.quit_now() # call original
x = exxxit()

Py2.7.1>help(x)
Help on instance of exxxit in module __main__:

class exxxit
 |  Shortcut for exit() function, use 'x' now
 |
 |  Methods defined here:
 |
 |  __repr__(self)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  quit_now = Use exit() or Ctrl-Z plus Return to exit
AAAfarmclub
quelle
2

Der OS-Befehl clearunter Linux und clsWindows gibt eine "magische Zeichenfolge" aus, die Sie einfach drucken können. Um die Zeichenfolge abzurufen, führen Sie den Befehl mit popen aus und speichern Sie ihn zur späteren Verwendung in einer Variablen:

from os import popen
with popen('clear') as f:
    clear = f.read()

print clear

Auf meinem Computer ist die Zeichenfolge '\x1b[H\x1b[2J'.

larsr
quelle
1
1) Diese magische Zeichenfolge ist eine ANSI-Sequenz . \x1b[Hbedeutet "Bewegen Sie den Cursor in die obere linke Ecke", \x1b[2Jbedeutet "den gesamten Bildschirm löschen". 2) In Windows wird ANSI nicht erkannt, daher gibt es wahrscheinlich keine magische Zeichenfolge.
Alba Mendez
1
Cool! Auch für Python3-Druck ('\ x1b [H \ x1b [2J', end = ''); kann helfen, die neue Linie vor zu vermeiden.
DenMark
Die magische Zeichenfolge funktionierte für mich auf der Microsoft Windows 10-Konsole mit Python 3.6. Ich plussierte für die String-Sequenz nicht die Verwendung von mit open.
DevPlayer
2

Hier sind zwei gute Möglichkeiten, dies zu tun:

1.

import os

# Clear Windows command prompt.
if (os.name in ('ce', 'nt', 'dos')):
    os.system('cls')

# Clear the Linux terminal.
elif ('posix' in os.name):
    os.system('clear')

2.

import os

def clear():
    if os.name == 'posix':
        os.system('clear')

    elif os.name in ('ce', 'nt', 'dos'):
        os.system('cls')


clear()
userend
quelle
Wenn os.name keines davon ist, warum nicht auf das Drucken leerer Zeilen zurückgreifen?
Alba Mendez
Wenn es Jython ist, möchte ich, dass Sie wissen, dass os.name = 'java'
iChux
Sieht gut aus, bedeutet dies, dass das Programm plattformübergreifend werden kann?
Luke
2

Am einfachsten ist es, das OS-Modul zu verwenden

>>> import os
>>> clear = lambda: os.system('clear')
>>> clear()
Bhaskar Mishra
quelle
1

Dies sollte Cross - Plattform sein, und verwendet auch die bevorzugte subprocess.callstatt os.systemgemäß dem os.systemdocs . Sollte in Python funktionieren> = 2.4.

import subprocess
import os

if os.name == 'nt':
    def clearscreen():
        subprocess.call("cls", shell=True)
        return
else:
    def clearscreen():
        subprocess.call("clear", shell=True)
        return
Eichel
quelle
1

Wie wäre es damit für eine klare

- os.system('cls')

Das ist ungefähr so ​​kurz wie möglich!

Dennis Kean
quelle
Ja, aber keine Multiplattform, und Sie müssen sie jedes Mal neu eingeben, wenn Sie den Bildschirm löschen möchten.
Alba Mendez
1

Ich bin neu in Python (wirklich sehr, sehr neu) und in einem der Bücher, die ich lese, um mich mit der Sprache vertraut zu machen, in der sie lernen, wie man diese kleine Funktion erstellt, um die Konsole vom sichtbaren Rückstand und früheren Befehlen und Ausdrucken zu befreien:

Shell öffnen / Neues Dokument erstellen / Funktion wie folgt erstellen:

def clear():
    print('\n' * 50)

Speichern Sie es im lib-Ordner in Ihrem Python-Verzeichnis (meins ist C: \ Python33 \ Lib). Wenn Sie das nächste Mal Ihre Konsole löschen müssen, rufen Sie einfach die Funktion auf mit:

clear()

das ist es. PS: Sie können Ihre Funktion so benennen, wie Sie möchten. Ich habe Leute gesehen, die "Wischer", "Wischen" und Variationen benutzt haben.

Adriana
quelle
1

Ich verwende Spyder (Python 2.7) und zum Reinigen der Interpreter-Konsole verwende ich entweder

%klar

Dadurch wird die Befehlszeile nach oben verschoben, und die vorherigen alten Befehle werden nicht angezeigt.

oder ich klicke in der Konsolenumgebung auf "Option" und wähle "Kernel neu starten", um alles zu entfernen.

Youness
quelle
1

Einfach eintreten

import os
os.system('cls') # Windows
os.system('clear') # Linux, Unix, Mac OS X
Anonym
quelle
1

Wenn es auf einem Mac ist, sollte ein einfacher cmd + kden Trick machen.

CoderChai
quelle
1

Wenn Sie dies nicht über Code tun müssen, drücken Sie einfach STRG + L.

Steven Tautonico
quelle
Ja, das funktioniert, aber wenn Sie in Ihrer Python-Datei einen Befehl zum Löschen der Konsole erstellen möchten, müssen Sie den Benutzer nicht einfach etwas eingeben lassen und ihn dann auffordern, ihn selbst zu löschen. Sie würden die Konsole durch Code löschen.
Madladzen
1

Arch Linux (getestet xfce4-terminalmit Python 3):

# Clear or wipe console (terminal):
# Use: clear() or wipe()

import os

def clear():
    os.system('clear')

def wipe():
    os.system("clear && printf '\e[3J'")

... hinzugefügt zu ~/.pythonrc

  • clear() löscht den Bildschirm
  • wipe() löscht den gesamten Terminalpuffer
Victoria Stuart
quelle
0

EDIT: Ich habe gerade "Windows" gelesen, dies ist für Linux-Benutzer, sorry.


In Bash:

#!/bin/bash

while [ "0" == "0" ]; do
    clear
    $@
    while [ "$input" == "" ]; do
        read -p "Do you want to quit? (y/n): " -n 1 -e input
        if [ "$input" == "y" ]; then
            exit 1
        elif [ "$input" == "n" ]; then
            echo "Ok, keep working ;)"
        fi
    done
    input=""
done

Speichern Sie es als "whatyouwant.sh", chmod + x es dann ausführen:

./whatyouwant.sh python

oder etwas anderes als Python (Leerlauf, was auch immer). Hier werden Sie gefragt, ob Sie tatsächlich beenden möchten, wenn nicht, wird Python erneut ausgeführt (oder der Befehl, den Sie als Parameter angegeben haben).

Dadurch werden alle Bildschirme und alle Variablen / Objekte / alles gelöscht, was Sie in Python erstellt / importiert haben.

Geben Sie in Python einfach exit () ein, wenn Sie beenden möchten.

Andrea Ambu
quelle
0

OK, dies ist eine viel weniger technische Antwort, aber ich verwende das Python-Plugin für Notepad ++ und es stellt sich heraus, dass Sie die Konsole einfach manuell löschen können, indem Sie mit der rechten Maustaste darauf klicken und auf "Löschen" klicken. Hoffe das hilft jemandem da draußen!

guest12345
quelle