Przezroczysty ekran w powłoce

90

Tylko krótkie pytanie:
jak wyczyścić ekran w powłoce? Widziałem sposoby takie jak:

import os
os.system('cls')

To tylko otwiera okno cmd, czyści ekran i zamyka, ale chcę, aby okno powłoki zostało wyczyszczone
(PS: nie wiem, że to pomaga, ale używam wersji 3.3.2 Pythona)
Dziękuję :)

Josh
źródło
możliwy duplikat Jak wyczyścić konsolę interpretera Pythona?
Cees Timmerman

Odpowiedzi:

57

W przypadku systemu macOS / OS X można użyć modułu podprocesu i wywołać „cls” z powłoki:

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

Aby zapobiec wyświetlaniu „0” w górnej części okna, zamień drugą linię na:

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

W systemie Linux musisz zamienić clspolecenie naclear

tmp = sp.call('clear', shell=True)
GalHai
źródło
3
Używam systemu Mac OS X i próbowałem tego, import subprocess as sp sp.call('clear',shell=True)co działa, z wyjątkiem tego, że 0u góry okna terminala znajduje się.
Daniel Dropik,
0 jest wartością zwracaną przez wywołanie polecenia „cls” z powłoki. zredagowałem odpowiedź, aby się tego również pozbyć, po prostu przechowując tę ​​wartość w zmiennej.
GalHai,
9
Spróbuj tegoctrl+L
Sai Ram
To działa w linii poleceń. Pytanie brzmiało, jak to zrobić w Pythonie.
Edward Falk
Dzięki za rozwiązanie brakowało mi powłoki = True. aby zapobiec pojawianiu się 0, możesz również dodać średnik na końcu instrukcji. sp.call('cls', shell=True);
Waylon Walker
84

A co ze skrótem CTRL+ L?

Działa dla wszystkich powłok, np. Python, Bash, MySQL, MATLAB itp.

Shafiq
źródło
6
Niestety nie działa na Windows w tym nowy cmd w Windows10
9a3eedi
Podczas korzystania z podprocesu do automatyzacji to podejście nie działa.
mountainLion
64
import os

os.system('cls')  # For Windows
os.system('clear')  # For Linux/OS X
Rajan Mandanka
źródło
Również os.system('clear')dla terminali Mac OS X (potwierdzono, że działa z domyślną powłoką bash, a także dla csh).
jvriesem
Możesz także zdefiniować funkcję, która to uruchomi, na przykład: def cls (): os.system ('cls') (naciśnij dwukrotnie enter). Następnie możesz po prostu wpisać cls (), aby wyczyścić ekran.
Pytanie dotyczyło tego, jak to zrobić w powłoce.
Kyle Delaney
1
@KyleDelaney, choć nieefektywny, działa w powłoce. Również wiele osób uznało to za przydatne, ponieważ tego właśnie szukali.
Gaspa79
12

To, czego szukasz, można znaleźć w module curses.

to znaczy

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

Ważna uwaga

Ważną rzeczą do zapamiętania jest to, że przed każdym wyjściem musisz zresetować terminal do normalnego trybu, można to zrobić za pomocą następujących linii:

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

Jeśli tego nie zrobisz, będziesz miał wszelkiego rodzaju dziwne zachowania. Aby mieć pewność, że tak jest zawsze, sugerowałbym użycie modułu atexit, na przykład:

import atexit

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

Prawdopodobnie nieźle się nada.

Steve Barnes
źródło
Czy mógłbyś to sprecyzować?
josh
1
Używam Mac OS X 10.7.5 i iTerm 2 dla mojego terminala. Używając Python2.7, stdscr = curses.initscr()działa czyści ekran, stdscr.clear()ale nic nie robi. Używając Pythona 3.4, stdscr = curses.initscr()czyści ekran, ale odbiera terminalowi zdolność przetwarzania znaków nowej linii. Kiedy kilkakrotnie naciskam Enter, daje to: >>> >>> >>> >>> i tak dalej. Nadal mogę wpisywać polecenia, ale się nie pojawiają. To zachowanie utrzymuje się nawet wtedy, gdy używam exit()języka Python. UNIKAĆ UŻYCIA!
jvriesem
@jvriesem moduł curses był używany przez długi czas i był używany przez wiele osób - sugerowałbym, abyś zobaczył, czy możesz powtórzyć zachowanie w krótkim (około 20 wierszach), przykładzie i albo w poście jako pytanie o przepełnienie stosu lub na liście mailingowej deweloperów.
Steve Barnes
Dobry pomysł - to lepsza odpowiedź niż moje „UNIKAJ UŻYCIA!” komunikat. Pierwsze dwa wiersze tej odpowiedzi to dwa wiersze, które powielają problem. Czy wiesz, czy istnieje jakiś powód, dla którego cursesmoduł może mieć problemy ze zgodnością (Windows, Mac, Linux)? Mogę potwierdzić, że ten problem występuje przynajmniej na dwóch różnych terminalach Mac. To zachowanie utrzymuje się w BASH, ale nie w CSH. Hmm ... Myślisz, że powinienem skontaktować się z twórcą curses, twórcą powłoki, czy po prostu zapytać społeczność SO? Dzięki jeszcze raz!
jvriesem
@jvriesem - Zaktualizowałem moją odpowiedź, aby uwzględnić, jak zresetować terminal do trybu standardowego po zakończeniu, w tym przy każdym wyjściu.
Steve Barnes
12

Oto kilka opcji, których możesz użyć w systemie Windows

Pierwsza opcja:

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

>>> cls()

Druga opcja:

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

>>> cls()

Trzecia opcja, jeśli jesteś w oknie Python REPL:

Ctrl+L
Vlad Bezden
źródło
9

Oprócz tego, że jest wszechstronną, świetną biblioteką CLI, clickzapewnia również funkcję niezależną od platformy clear():

import click
click.clear()
Martin Valgur
źródło
7

Ta funkcja działa w każdym systemie operacyjnym (Unix, Linux, macOS i Windows)
Python 2 i 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

W systemie Windows polecenie to cls, w systemach typu unix polecenie to clear.
platform.system()zwraca nazwę platformy. Dawny. 'Darwin'dla macOS.
subprocess.call()wykonuje wywołanie systemowe. Dawny.subprocess.call(['ls','-l'])

ePi272314
źródło
6

Łatwiejszym sposobem na wyczyszczenie ekranu w Pythonie jest użycie Ctrl+, Lchociaż działa to zarówno dla powłoki, jak i innych programów.

BioinfoNerd
źródło
4

Jeśli używasz terminala linux do uzyskania dostępu do Pythona, to cntrl + l jest najlepszym rozwiązaniem do wyczyszczenia ekranu

HMS
źródło
4

Używam klasy, która po prostu używa jednej z powyższych metod za kulisami ... Zauważyłem, że działa na Windows i Linux ... Jednak lubię jej używać, ponieważ łatwiej jest wpisać clear () zamiast system ('clear' ) lub os.system ('clear')

pip3 install clear-screen

from clear_screen import clear

a następnie, gdy chcesz wyczyścić powłokę:

clear()

źródło
3

używając Windows 10 i pyhton3.5 przetestowałem wiele kodów i nic nie pomogło mi bardziej niż to:

Najpierw zdefiniuj prostą funkcję, ta funkcja wypisze 50 nowych linii; (liczba 50 będzie zależała od tego, ile linii możesz zobaczyć na ekranie, więc możesz zmienić tę liczbę)

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

potem po prostu dzwoń tyle razy, ile chcesz lub potrzebujesz

cls()
sami.almasagedi
źródło
Żaden z gotowych pomysłów dotyczących poleceń nie zadziałał dla mnie. tworząc to, moja własna funkcja oczywiście tak.
DashingQuark,
2

Command+K działa dobrze w OSX, aby wyczyścić ekran.

Shift+Command+K aby wyczyścić tylko bufor przewijania.

Ayer
źródło
1
import curses
stdscr = curses.initscr()
stdscr.clear()
sl1ng5h0t
źródło
1

Podproces umożliwia wywołanie „cls” dla Shell.

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

To jest tak proste, jak tylko mogę. Mam nadzieję, że to działa dla Ciebie!

Seth Connell
źródło
1
  1. możesz użyć systemu Windows lub Linux Os

    import os
    os.system('cls')
    os.system('clear')
    
  2. możesz użyć modułu podprocesu

    import subprocess as sp
    x=sp.call('cls',shell=True)
    
Rohit Parghi
źródło
1

os.system('cls')działa dobrze, gdy je otwieram. Otwiera się w stylu cmd.

Phich
źródło
1

Zamiast importować wszystkie przekleństwa lub strzelać tylko po to, aby uzyskać jeden znak sterujący, możesz po prostu użyć (w systemie Linux / macOS):

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

(Źródło: Clear terminal w Pythonie )

Charles L.
źródło
0

Oto jak stworzyć własne polecenie clslub clearpolecenie, które będzie działać bez jawnego wywoływania żadnej funkcji!

Wykorzystamy fakt, że konsola Pythona wywołuje repr()wyświetlanie obiektów na ekranie. Jest to szczególnie przydatne, jeśli masz własną dostosowaną powłokę Pythona ( -ina przykład z opcją) i masz do niej wstępnie ładowany skrypt. Oto, czego potrzebujesz:

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

cls = ScreenCleaner()

Użyj clearzamiast, clsjeśli jesteś w systemie Linux (zarówno w ospoleceniu, jak i nazwie zmiennej)!

Teraz, jeśli po prostu napiszesz clslub clearw konsoli - wyczyści to! Nawet cls()ani clear()- tylko surowa zmienna. Dzieje się tak, ponieważ Python wywoła, repr(cls)aby go wydrukować, co z kolei uruchomi naszą __repr__funkcję.

Przetestujmy to:

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

A ekran jest czysty!

Aby wyjaśnić - powyższy kod musi zostać zaimportowany do konsoli w ten sposób

from somefile import cls

Lub załaduj wstępnie bezpośrednio za pomocą czegoś takiego:

python -i my_pre_loaded_classes.py
Ofer Sadan
źródło
0

To najlepszy sposób:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()
Fahimbd_14
źródło
3
Naprawdę nie widzę, jak twoja odpowiedź polepszy się w stosunku do którejkolwiek odpowiedzi udzielonej już w poprzednich latach.
David Buck
Ci, którzy tego potrzebują, zobaczą. Nie potrzebuję ulepszeń brachu. dzięki stary.
Fahimbd_14
2
nie mówił o poprawie twojej odpowiedzi. Stwierdził, że twoja odpowiedź nie jest przydatna, ponieważ ktoś już podał tę samą.
OmikronWeapon
0

W przypadku Python IDLE 3.8.1 możesz ponownie uruchomić Shell

CTRL + F6

W menu Kliknij menu Shell. Następnie kliknij opcję Uruchom ponownie powłokę.

Peter Cockram
źródło