Очистити екран в оболонці


90

Просто коротке запитання:
Як очистити екран в оболонці? Я бачив такі способи:

import os
os.system('cls')

Це просто відкриває cmd windows, очищає екран і закриває, але я хочу, щоб вікно оболонки було очищено
(PS: Я не знаю, що це допомагає, але я використовую версію 3.3.2 Python)
Дякую :)


Відповіді:


57

Для macOS / OS X ви можете використовувати модуль підпроцесу та викликати 'cls' з оболонки:

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

Щоб «0» не відображався у верхній частині вікна, замініть 2-й рядок на:

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

У Linux вам слід замінити clsкоманду наclear

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

3
Я використовую Mac OS X, і я спробував це, import subprocess as sp sp.call('clear',shell=True)що працює, за винятком того, що є 0вгорі вікна терміналу.
Даніель Дропік

0 - це повертане значення виклику команди 'cls' з оболонки. я відредагував відповідь, щоб позбутися і цього, просто зберігаючи це значення у змінній.
GalHai,

9
Спробуйте цеctrl+L
Сай Рам

Це працює в командному рядку. Питання полягало в тому, як це зробити в Python.
Едвард Фальк

Дякую за рішення, мені не вистачало shell = True. щоб запобігти показу 0, ви також можете додати крапку з комою в кінець висловлювання. sp.call('cls', shell=True);
Waylon Walker

85

А як щодо ярлика CTRL+ L?

Він працює для всіх оболонок, наприклад, Python, Bash, MySQL, MATLAB тощо.


5
На жаль, не працює в Windows, включаючи новий cmd у Windows10
9a3eedi,

64
import os

os.system('cls')  # For Windows
os.system('clear')  # For Linux/OS X

Також os.system('clear')для терміналів Mac OS X (підтверджено, що вони працюють із оболонкою за замовчуванням bash, а також для csh).
jvriesem

Ви також можете визначити функцію для запуску цього, наприклад: def cls (): os.system ('cls') (натисніть клавішу Enter двічі). Потім ви можете просто набрати cls (), щоб очистити екран.

Питання було про те, як це зробити в оболонці.
Kyle Delaney

1
@KyleDelaney, хоча і неефективний, він працює в оболонці. Також багато людей знайшли це корисним, тому що саме це вони шукали.
Gaspa79

12

Те, що ви шукаєте, можна знайти в модулі curses.

тобто

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

Важлива примітка

Важливо пам’ятати, що перед будь-яким виходом вам потрібно скинути термінал у звичайний режим, це можна зробити за допомогою таких рядків:

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

Якщо ви цього не зробите, ви отримаєте якусь дивну поведінку. Щоб це завжди робилося, я б запропонував використовувати модуль atexit, щось на зразок:

import atexit

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

Напевно, зробить приємно.


Чи можете ви бути більш конкретними?
Джош

1
Я використовую Mac OS X 10.7.5 та iTerm 2 для мого терміналу. За допомогою Python2.7 stdscr = curses.initscr()працює, щоб очистити екран, а програма stdscr.clear()нічого не робить. Використовуючи Python3.4, stdscr = curses.initscr()він очищає екран, але забирає можливість терміналу обробляти нові рядки. Коли я кілька разів натискаю клавішу Enter, з’являється таке: >>> >>> >>> >>> тощо. Я все ще можу вводити команди, але вони не відображаються. Крім того, така поведінка зберігається навіть тоді, коли я exit()працюю на Python. УНИКНІТЬ ВИКОРИСТАННЯ!
jvriesem

@jvriesem модуль curses використовується довгий час і використовується багатьма людьми - я б запропонував вам подивитися, чи можете ви відтворити поведінку в короткому, (20 рядків або близько того), прикладі і будь-якому дописі це як запитання про переповнення стека або у списку розсилки розробника.
Steve Barnes

Хороша ідея - це краща реакція, ніж моє "УКІНЧАТИ ВИКОРИСТАННЯ!" заява. Перші два рядки цієї відповіді для мене повторювали проблему. Чи знаєте ви, чи є якісь причини, що у cursesмодуля можуть бути проблеми із сумісністю (Windows проти Mac проти Linux)? Я можу підтвердити, що ця проблема трапляється принаймні на двох різних терміналах Mac. Поведінка зберігається у BASH, але не в CSH. Хм .... Чи вважаєте ви, що мені слід зв'язатися з розробником проклять, розробником оболонки або просто запитати спільноту SO? Знову дякую!
jvriesem

@jvriesem - Я оновив свою відповідь, включивши те, як повернути термінал до стандартного режиму після завершення, включаючи будь-який вихід.
Стів Барнс,

12

Ось кілька варіантів, які можна використовувати в Windows

Перший варіант:

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

>>> cls()

Другий варіант:

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

>>> cls()

Третій варіант, якщо ви знаходитесь у вікні REPL на Python:

Ctrl+L

9

Окрім того, що це універсальна чудова бібліотека CLI, вона clickтакож забезпечує clear()функцію агностики платформи :

import click
click.clear()

7

Ця функція працює в будь-якій ОС (Unix, Linux, macOS та Windows)
Python 2 та 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

У Windows команда така cls, в Unix-подібних системах команда clear.
platform.system()повертає назву платформи. Напр. 'Darwin'для macOS.
subprocess.call()виконує системний виклик. Напр.subprocess.call(['ls','-l'])


6

Більш простим способом очищення екрана під час роботи з python є використання Ctrl+, Lхоча це працює як для оболонки, так і для інших програм.


4

Якщо ви використовуєте термінал Linux для доступу до python, тоді cntrl + l - найкраще рішення для очищення екрана


4

Я використовую клас, який просто використовує один із вищезазначених методів за кадром ... Я помітив, що він працює в Windows і Linux ... Мені подобається його використовувати, оскільки простіше вводити clear () замість системи ('clear' ) або os.system ('очистити')

pip3 install clear-screen

from clear_screen import clear

а потім, коли ви хочете очистити оболонку:

clear()

3

за допомогою Windows 10 та pyhton3.5 я протестував багато кодів, і ніщо мені не допомогло більше, ніж це:

Спочатку визначте просту функцію, ця функція надрукує 50 нових рядків; (число 50 буде залежати від того, скільки рядків ви можете бачити на своєму екрані, тому ви можете змінити це число)

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

тоді просто зателефонуйте йому стільки разів, скільки хочете або потрібно

cls()

Жодна з готових ідей команд не працювала для мене. створивши це, я, звичайно, зробив мою власну функцію.
DashingQuark

2

Command+K чудово працює в OSX, щоб очистити екран.

Shift+Command+K щоб очистити лише буфер прокрутки.



1

Підпроцес дозволяє викликати "cls" для Shell.

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

Це настільки просто, наскільки я можу це зробити. Сподіваюся, це працює для вас!


1
  1. Ви можете використовувати Windows або Linux OS

    import os
    os.system('cls')
    os.system('clear')
    
  2. Ви можете використовувати модуль підпроцесу

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

1

os.system('cls')чудово працює, коли я їх відкриваю. Він відкривається в стилі cmd.


1

Замість того, щоб імпортувати всі прокляття або обстрілювати лише для того, щоб отримати один контрольний символ, ви можете просто використовувати (на Linux / macOS):

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

(Джерело: Очистити термінал на Python )


0

Ось як зробити свій власний clsабоclear команду , яка буде працювати без явного виклику будь-якої функції!

Ми скористаємось тим, що консоль python викликає repr()відображення об’єктів на екрані. Це особливо корисно, якщо у вас є власна налаштована оболонка python (з -iопцією, наприклад) і у вас є сценарій попереднього завантаження для неї. Це те, що вам потрібно:

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

cls = ScreenCleaner()

Використовуйте clearзамість, clsякщо ви використовуєте Linux (в обох файлахos команді, так і в назві змінної)!

Тепер, якщо ви просто напишете clsабо clearв консолі - це очистить! Навіть навіть cls()або clear()- лише вихідна змінна. Це тому, що python зателефонує repr(cls)для його роздрукування, що, в свою чергу, спричинить наш__repr__ функцію.

Давайте перевіримо це:

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

І екран зрозумілий!

Для уточнення - наведений вище код потрібно або імпортувати в консоль, як це

from somefile import cls

Або попередньо завантажте безпосередньо щось на зразок:

python -i my_pre_loaded_classes.py

0

Це найкращий спосіб:

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

3
Я насправді не бачу, як ваша відповідь покращується щодо будь-якої з відповідей, вже даних у попередні роки.
Девід Бак,

Ті, кому це потрібно, побачать. Мені не потрібно вдосконалення, брате. дякую, брате.
Fahimbd_14

2
він не говорив про покращення вашої відповіді. Він заявив, що ваша відповідь не є корисною, оскільки хтось інший вже дав її.
OmikronWeapon

0

Для Python IDLE 3.8.1 ви можете перезапустити оболонку

CTRL + F6

У меню Клацніть на меню Оболонка. Потім натисніть опцію Перезапустити оболонку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.