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.



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

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

Ś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

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

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

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.


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.


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

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.

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

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

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


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.


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.


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

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


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

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

Najprostszym sposobem jest użycie modułu os

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

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

1

Co powiesz na to dla jasności

- os.system('cls')

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


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.


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.



1

Po prostu wejdź

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

1

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


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

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ść.


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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.