Очистить экран в оболочке


90

Просто быстрый вопрос:
как очистить экран в оболочке? Я видел такие способы:

import os
os.system('cls')

Это просто открывает cmd окна, очищает экран и закрывается, но я хочу, чтобы окно оболочки было очищено
(PS: я не знаю, это помогает, но я использую версию 3.3.2 Python)
Спасибо :)


Ответы:


57

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

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

Чтобы «0» не отображался в верхней части окна, замените вторую строку на:

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);
Уэйлон Уокер

85

А как насчет ярлыка CTRL+ L?

Он работает для всех оболочек, например Python, Bash, MySQL, MATLAB и т. Д.


8
К сожалению, не работает в Windows, включая новый cmd в Windows10
9a3eedi

При использовании подпроцесса для автоматизации этот подход не работает.
mountainLion

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 (), чтобы очистить экран.

Вопрос был в том, как это сделать в оболочке.
Кайл Делани

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 строк или около того) примере и либо опубликовать это как вопрос о переполнении стека или в списке рассылки разработчиков.
Стив Барнс

Хорошая идея - это лучший ответ, чем мое "ИЗБЕГАЙТЕ ИСПОЛЬЗОВАНИЯ!" заявление. Первые две строки этого ответа были двумя строками, которые повторяют проблему для меня. Знаете ли вы, есть ли причина, по которой cursesмодуль может иметь проблемы с совместимостью (Windows, Mac или Linux)? Я могу подтвердить, что эта проблема возникает, по крайней мере, на двух разных терминалах Mac. Такое поведение сохраняется в BASH, но не в CSH. Хм .... Как вы думаете, мне следует связаться с разработчиком curses, разработчиком оболочки или просто спросить сообщество SO? Еще раз спасибо!
jvriesem

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

12

Вот несколько вариантов, которые вы можете использовать в Windows

Первый вариант:

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

>>> cls()

Второй вариант:

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

>>> cls()

Третий вариант, если вы находитесь в окне Python REPL:

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()возвращает название платформы. Ex. 'Darwin'для macOS.
subprocess.call()выполняет системный вызов. Ex.subprocess.call(['ls','-l'])


6

Более простой способ очистить экран в Python - использовать Ctrl+, Lхотя он работает как для оболочки, так и для других программ.


4

Если вы используете терминал linux для доступа к python, то cntrl + l - лучшее решение для очистки экрана.


4

Я использую класс, который просто использует один из вышеперечисленных методов за кулисами ... Я заметил, что он работает в Windows и Linux ... Мне нравится его использовать, потому что легче набрать clear () вместо system ('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

    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

В меню Щелкните меню Shell. Затем нажмите на опцию Restart Shell.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.