Przezroczysty ekran w powłoce


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)

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.


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

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.


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

9

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

import click
click.clear()

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


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.


4

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


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

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

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



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!


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)
    

1

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


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 )


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

0

To najlepszy sposób:

>>>import os
>>>def cls(): os.system('cls')
>>>cls()

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

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.