Jak wyczyścić konsolę tłumacza?

325

Podobnie jak większość programistów Python, zazwyczaj utrzymuję otwarte okno konsoli z uruchomionym interpreterem Python, aby przetestować polecenia, dir()rzeczy help() stuffitp.

Jak każda konsola, po pewnym czasie widoczny zaległości poprzednich poleceń i wydruków staje się zagracony, a czasem mylący przy ponownym uruchomieniu tego samego polecenia kilka razy. Zastanawiam się, czy i jak wyczyścić konsolę interpretera Pythona.

Słyszałem o wykonywaniu wywołania systemowego i albo clsw Windowsie, albo clearw Linuksie, ale miałem nadzieję, że jest coś, co mógłbym polecić samemu tłumaczowi.

Uwaga: działam w systemie Windows, więc Ctrl+Lnie działa.

Soviut
źródło
Rozwiązanie IPython tutaj: stackoverflow.com/questions/6892191/…
onewhaleid
Dziwię się, że nikt o tym nie wspominał. Ale kiedy używasz powłoki Ipython, możesz wykonywać kombinację klawiszy Ctrl + L nawet w
systemie

Odpowiedzi:

442

Jak wspomniałeś, możesz wykonać wywołanie systemowe:

Dla Windowsa

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

W Linuksie staje się lambda

>>> clear = lambda: os.system('clear')
Ryan Duffield
źródło
1
Ta odpowiedź jest najbliższa „duchowi” tego, o co prosiłam, dzięki.
Soviut
1
+1, fajna odpowiedź. Czy istnieje sposób na wykorzystanie wartości zwracanej, aby się nie wyświetlała? Dostaję „0” po wyczyszczeniu.
technomalogiczny
15
Zdefiniuj go w funkcji zwykłej zamiast lambda nie powinien pokazywać „0”, ponieważ zwracaną wartością będzie Brak.
Akbar ibrahim
46
Co jest złego w korzystaniu def? Po co używać a, lambdagdy defjest jaśniejsze?
S.Lott,
17
@Akbaribrahim as None nie zostanie wydrukowany, spróbuj tego:clear = lambda: os.system('cls') or None
enpenax,
193

tutaj coś przydatnego, co jest trochę bardziej wieloplatformowe

import os

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

# now, to clear the screen
cls()
popcnt
źródło
Świetny sposób na załatwienie różnych spraw. Połącz to z powyższą sugestią lambda, aby zaoszczędzić rząd kodu, przydatny jak diabli! Dziękuję Ci! :)
Torxed
import os os.system('cls')
Do Nhu Vy
1
Zmienna środowiskowa TERM nie jest ustawiona.
Jonathan
87

Oto szybki hack:

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

Lub, aby zapisać trochę pisania, umieść ten plik w ścieżce wyszukiwania w Pythonie:

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

wipe = Wipe()

Następnie możesz to zrobić z tłumacza, jak chcesz :)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe
Tryptyk
źródło
12
Haha, to całkiem zabawne. Nie do końca to, czego szukałem, ale niezła próba.
Soviut
4
@Triptych: c = "\ n" * 100 przydatnych, +1 za to. Mały komentarz, który usuwa i przenosi na spód powłoki, wolę zaczynać od góry powłoki.
pythonbeginer
1
Lub, jeśli twój emulator terminala interpretuje ANSI, lepiej:"\x1B[H\x1B[J"
Alba Mendez
8
Pomimo ludzi śmiech, drukując wiele nowych linii jest dokładnie to, co zewnętrzne procesy cleari clszrobić. To jest sposób, aby to zrobić. (po prostu print lub funkcja z wywołaniem print, oczywiście nie przypisująca „czystego” ciągu)
jsbueno
4
@ jsbueno nie to nie jest. Cóż, może w systemie Windows (choć wątpię, ma interfejsy API do czyszczenia konsoli). We wszystkich innych systemach cleargeneruje dyrektywę, która czyści ekran. Bez usuwania bufora przewijania. W moim systemie, wyprowadza tę sekwencję sterowania: \33[3J\33[H\33[2J. Czyli: [erase scrollback] [reset cursor position] [erase screen]. [erase scrollback]Można pominąć użyciu clear -x.
spectras
28

Chociaż jest to starsze pytanie, pomyślałem, że mógłbym napisać coś podsumowującego to, co według mnie było najlepszą z pozostałych odpowiedzi, i dodać własną zmarszczkę, sugerując, aby umieścić te polecenia w pliku i ustawić PYTHONSTARTUP zmienna środowiskowa, aby na nią wskazać. Ponieważ jestem obecnie w systemie Windows, jest to nieco stronnicze w ten sposób, ale można go łatwo zmienić w innym kierunku.

Oto kilka artykułów, które opisałem, jak ustawić zmienne środowiskowe w systemie Windows:
    Kiedy używać sys.path.append, a kiedy modyfikujesz% PYTHONPATH% wystarczy
    Jak zarządzać zmiennymi środowiskowymi w Windows XP
    Konfigurowanie zmiennych środowiskowych systemu i użytkownika
    Jak korzystać z globalnego systemu Zmienne środowiskowe w systemie Windows

BTW, nie umieszczaj cudzysłowów wokół ścieżki do pliku, nawet jeśli ma w nim spacje.

Tak czy inaczej, oto moje zdanie na temat kodu do umieszczenia (lub dodania do istniejącego) skryptu uruchamiania Python:

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

BTW, możesz również użyć sztuczki @ Triptych, __repr__ aby zmienić się exit()na just exit(i to samo dla jej aliasu quit):

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

quit = exit = exit()

Na koniec, oto coś innego, co zmienia główny monit interpretera z >>>na cwd + >>>:

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

import sys
sys.ps1 = Prompt()
del sys
del Prompt
martineau
źródło
To prawdopodobnie najlepsza odpowiedź - połączenie technik z innych odpowiedzi. PYTHONSTARTUP + repr + os.system ('cls'). Bardzo dobrze.
Tryptyk
@Triptych: Jednym z interesujących efektów ubocznych używania __repr__i / lub w __str__ten sposób jest to, że jeśli wpiszesz >>> vars()w konsoli tłumacza, wykona wszystkie tak zdefiniowane polecenia. Na przykład w moim systemie wyczyściłem ekran, a następnie opuściłem konsolę. Zajęło mi trochę czasu, żeby dowiedzieć się, co się do cholery dzieje ...
martineau,
ciekawy. Widzę, że ten problem dotyczy również locals()i globals(). Prosty dekorator wokół tych funkcji, który usuwa nazwę i przypisuje ją ponownie po wywołaniu funkcji, jest możliwym rozwiązaniem ...
Tryptyk
@Triptych: Pomysł dekoratora nie działa, przynajmniej przy moich własnych próbach. Wymyślenie realnej alternatywy okazuje się zaskakująco trudne.
martineau
Mam rozwiązanie kandydujące, które po prostu tymczasowo wycenia
Triptych
28

Istnieje wiele sposobów wykonywania tego w systemie Windows:

1. Za pomocą skrótu klawiaturowego:

Press CTRL + L

2. Przy użyciu metody invoke systemu:

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

3. Przy użyciu nowego wydruku linii 100 razy:

cls = lambda: print('\n'*100)
cls()
Vlad Bezden
źródło
5
Wszystkie te sposoby są całkiem ... naff. clsbędzie działać tylko w systemie Windows i sprawi, że Twój program będzie trudny do przejścia na wiele platform, drukowanie 100 newlinesto po prostu ... eww? W programie nie jest używany skrót klawiaturowy.
Łukasz
22

Najszybszym i najłatwiejszym sposobem bez wątpienia jest Ctrl+L .

To samo dotyczy OS X na terminalu.

Alex K.
źródło
3
Wypróbowałem to rozwiązanie, używając wielkich lub małych liter „L” z klawiszem Ctrl w systemie Windows 8.1. To nie działa dla mnie. Po prostu otwieram i zamykam okno powłoki, aby je wyczyścić.
Chris22
2
W OS X, Ctrl + L będzie padał na terminal, aż wyświetlacz będzie czysty. Nadal możesz przewijać w górę, aby zobaczyć historię. Użyj Cmd + K, aby wyczyścić historię wyświetlania i wydruku. Bardziej kompletna lista skrótów klawiszowych terminalu OS X
Andrew Franklin
2
Pracuj dla mnie pięknie w Ubuntu Desktop 16
Nam G VU
15

moim sposobem jest napisanie takiej funkcji:

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

następnie zadzwoń, clear()aby wyczyścić ekran. Działa to na Windows, OSX, Linux, BSD ... wszystkich systemach operacyjnych.

MartinUbuntu
źródło
Możesz mieć na myśli os.name in ('linux','osx'), a także możesz chcieć dodać 'posix'.
rsanden
@rsanden „linux” i „osx” obejmuje prawie wszystkie osoby OSU, których faktycznie używają.
MartinUbuntu
Używam Ubuntu 15.04 i os.name == 'posix'zarówno w Pythonie 2.7.9, jak i 3.4.3
rsanden
@rsanden dodał posix.
MartinUbuntu,
9

Oto wieloplatformowy (Windows / Linux / Mac / Prawdopodobnie inne, które można dodać w sprawdzeniu if) fragment wersji, który utworzyłem, łącząc informacje znalezione w tym pytaniu:

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

Ten sam pomysł, ale z łyżką cukru syntaktycznego:

import subprocess   
clear = lambda: subprocess.call('cls||clear', shell=True)
clear()
Pitto
źródło
8

Wiper jest fajny, dobrą rzeczą jest to, że nie muszę wpisywać wokół niego „()”. Oto niewielka odmiana

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

Użycie jest dość proste:

>>> cls = Cls()
>>> cls # this will clear console.
Amol
źródło
2
Nazwałbym to class cls.
martineau,
1
Chciałbym wymienić instancję class Clsbyć cls. cls = Cls()
Amol
Tyle że zanieczyszcza początkową przestrzeń nazw dwiema rzeczami zamiast jednej ... dwa razy więcej.
martineau
@Amol W swoim rozwiązaniu wykorzystałem techniki własne i innych . Możesz zrobić class clsi wtedy cls=cls().
Alba Mendez,
8

Jest to najprostsza rzecz, którą możesz zrobić i nie wymaga ona żadnych dodatkowych bibliotek. Wyczyści ekran i powróci >>>do lewego górnego rogu.

print("\033[H\033[J")
Denis Rasulev
źródło
Ma to tę zaletę, że działa również w Spyder.
Graham G
7

dla użytkowników komputerów Mac wewnątrz konsoli typu Python

import os
os.system('clear')

dla Windowsa

os.system('cls')
Yubaraj Poudel
źródło
5

Oto ostateczne rozwiązanie, które łączy wszystkie inne odpowiedzi . Funkcje:

  1. Możesz skopiować i wkleić kod do powłoki lub skryptu.
  2. Możesz go używać , jak chcesz:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. Możesz zaimportować go jako moduł:

    >>> from clear import clear
    >>> -clear
  4. Możesz to nazwać skryptem:

    $ python clear.py
  5. To jest naprawdę wieloplatformowe ; jeśli nie może rozpoznać systemu
    ( ce, nt, doslub posix) spadnie z powrotem do drukowania pustych linii.


Możesz pobrać [pełny] plik tutaj: https://gist.github.com/3130325
Lub jeśli po prostu szukasz kodu:

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
źródło
5

Używam iTerm i natywnej aplikacji terminalowej na Mac OS.

Po prostu naciskam ⌘ + k

Jorge E. Hernández
źródło
4

Użyj bezczynności. Ma wiele przydatnych funkcji. Ctrl+F6, na przykład resetuje konsolę. Zamykanie i otwieranie konsoli to dobry sposób na jej wyczyszczenie.

S.Lott
źródło
jak to robisz na biegu jałowym? Po prostu zamknij i ponownie otwórz?
Andrea Ambu,
5
Nie, F6jednak nie resetuje bezczynnej konsoli CTRL+F6. Niestety nie powoduje to wyczyszczenia ekranu. Nie! (Python Win32 bezczynne wersje 2.6.2, 2.7.1, 3.2).
ridgerunner
4

Nie jestem pewien, czy „powłoka” systemu Windows obsługuje to, ale w systemie Linux:

print "\033[2J"

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

Moim zdaniem dzwonienie clsz osjest ogólnie złym pomysłem. Wyobraź sobie, że uda mi się zmienić polecenie cls lub clear w twoim systemie, a ty uruchomisz skrypt jako administrator lub root.

Peter G. Marczis
źródło
Zgadzam się, że cls nie jest w tym przypadku idealny, a sekwencja ucieczki ANSI jest lepsza. W szczególności użycie os do wywołania nowego procesu jest dość kosztowną operacją, w porównaniu do wypychania kilku bajtów na standardowe wyjście.
silviot
2

Używam MINGW / BASH na Windows XP, SP3.

(wklej to w .pythonstartup)
# Mój ctrl-l już trochę działał, ale może to pomóc komuś innemu
# pozostawia monit w dolnej części okna ...
importuj readline
readline.parse_and_bind ('\ Cl: clear-screen')

# Działa to w BASH, ponieważ mam go również w .inputrc, ale z jakiegoś
# powodu jest upuszczany, kiedy
wchodzę do Pythona readline.parse_and_bind ('\ Cy: kill-whole-line')


Nie mogłem już znieść pisania „exit ()” i byłem zachwycony sztuczkami Martineau / Triptych:

Lekko to napisałem (utknąłem w .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
źródło
2

Komenda systemu operacyjnego clearLinux i clsWindows wyświetla „magiczny ciąg”, który można po prostu wydrukować. Aby pobrać ciąg, wykonaj polecenie popen i zapisz go w zmiennej do późniejszego użycia:

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

print clear

Na mojej maszynie jest ciąg '\x1b[H\x1b[2J'.

larsr
źródło
1
1) Ten magiczny ciąg jest sekwencją ANSI . \x1b[Hoznacza „przesuń kursor do lewego górnego rogu”, \x1b[2Joznacza „wyczyść cały ekran”. 2) W Windows ANSI nie jest rozpoznawany, więc prawdopodobnie nie ma żadnego magicznego ciągu.
Alba Mendez,
1
Fajne! Także dla drukowania w python3 ('\ x1b [H \ x1b [2J', end = ''); może pomóc uniknąć nowej linii z przodu.
DenMark,
Magiczny ciąg działał dla mnie na konsoli Microsoft Windows 10 z Python 3.6. I plus za sekwencję ciągów, a nie użycie z otwartym.
DevPlayer,
2

Oto dwa fajne sposoby na zrobienie tego:

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
źródło
Jeśli os.name nie jest żadnym z nich, dlaczego nie wrócić do drukowania pustych linii?
Alba Mendez,
Jeśli to Jython, chcę, abyś wiedział, że os.name = 'java'
iChux
Wygląda dobrze, czy to oznacza, że ​​program może stać się wieloplatformowy?
Łukasz
2

Jeśli jest na Macu, prosty cmd + kpowinien załatwić sprawę .

CoderChai
źródło
2

Najprostszym sposobem jest użycie modułu os

>>> import os
>>> clear = lambda: os.system('clear')
>>> clear()
Bhaskar Mishra
źródło
1

Powinno to być wieloplatformowe, a także korzysta z preferowanego subprocess.callzamiast os.systemzgodnie z os.systemdokumentami . Powinien działać w Pythonie> = 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
Żołądź
źródło
1

Co powiesz na to dla jasności

- os.system('cls')

To jest tak krótkie, jak mogłoby być!

Dennis Kean
źródło
tak, ale nie wieloplatformowy i za każdym razem, gdy chcesz wyczyścić ekran, musisz go ponownie wpisać.
Alba Mendez,
1

Jestem nowy w Pythonie (naprawdę naprawdę nowy) iw jednej z książek, które czytam, aby zapoznać się z językiem, którego uczą, jak utworzyć tę małą funkcję, aby wyczyścić konsolę z widocznego zaległości oraz poprzednich poleceń i wydruków:

Otwórz powłokę / Utwórz nowy dokument / Utwórz funkcję w następujący sposób:

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

Zapisz go w folderze lib w swoim katalogu python (mój to C: \ Python33 \ Lib) Następnym razem, gdy będziesz musiał wyczyścić konsolę, po prostu wywołaj funkcję za pomocą:

clear()

Otóż ​​to. PS: możesz nazwać swoją funkcję w dowolny sposób. Iv „widział ludzi używających„ wycieraczek ”,„ wycierania ”i odmian.

Adrianna
źródło
1

Używam Spyder (Python 2.7) i do czyszczenia konsoli interpretera używam jednego z nich

%jasny

to zmusza linię poleceń do przejścia na górę i nie zobaczę poprzednich starych poleceń.

lub klikam „opcja” w środowisku konsoli i wybieram „Uruchom ponownie jądro”, który usuwa wszystko.

Youness
źródło
1

Po prostu wejdź

import os
os.system('cls') # Windows
os.system('clear') # Linux, Unix, Mac OS X
Anonimowy
źródło
1

Jeśli nie musisz tego robić za pomocą kodu, po prostu naciśnij CTRL + L

Steven Tautonico
źródło
Tak, to działa, ale co jeśli chcesz zrobić polecenie w pliku Pythona, które czyści konsolę, nie zmusisz użytkownika do wpisania czegoś, a następnie powiesz mu, aby sam to wyczyścił. wyczyścisz konsolę za pomocą kodu.
madladzen
1

Arch Linux (testowany w xfce4-terminalPythonie 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'")

... dodano do ~/.pythonrc

  • clear() czyści ekran
  • wipe() czyści cały bufor terminala
Victoria Stuart
źródło
0

EDYCJA: Właśnie przeczytałem „Windows”, to jest dla użytkowników Linuksa, przepraszam.


W 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

Zapisz go jako „whatyouwant.sh”, chmod + x, a następnie uruchom:

./whatyouwant.sh python

lub coś innego niż python (bezczynny, cokolwiek). Spyta cię, czy naprawdę chcesz wyjść, jeśli nie, uruchom ponownie Pythona (lub polecenie podane jako parametr).

Spowoduje to wyczyszczenie całego ekranu i wszystkich zmiennych / obiektów / wszystkiego, co utworzyłeś / zaimportowałeś w pythonie.

W pythonie wystarczy wpisać exit (), kiedy chcesz wyjść.

Andrea Ambu
źródło
0

OK, więc jest to o wiele mniej techniczna odpowiedź, ale używam wtyczki Python dla Notepad ++ i okazuje się, że możesz po prostu wyczyścić konsolę ręcznie, klikając ją prawym przyciskiem myszy i klikając „wyczyść”. Mam nadzieję, że to pomoże komuś tam!

guest12345
źródło