Как очистить консоль переводчика?


325

Как и большинство разработчиков Python, я обычно держу консольное окно открытым с запущенным интерпретатором Python для проверки команд, dir()вещей help() stuffи т. Д.

Как и любая консоль, через некоторое время видимое отставание прошлых команд и отпечатков становится загроможденным, и иногда возникает путаница при повторном запуске одной и той же команды несколько раз. Мне интересно, если и как очистить консоль интерпретатора Python.

Я слышал о выполнении системного вызова и либо о вызове clsв Windows или clearв Linux, но я надеялся, что есть что-то, что я мог бы заставить интерпретатора сделать сам.

Примечание: я работаю на Windows, поэтому Ctrl+Lне работает.


IPython решение здесь: stackoverflow.com/questions/6892191/…
onewhaleid

Я удивлен, что никто не упомянул об этом. Но когда вы используете оболочку Ipython, вы можете использовать Ctrl + L даже в Windows
user93

Ответы:


443

Как вы упомянули, вы можете сделать системный вызов:

Для Windows

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

Для Linux лямбда становится

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

1
Этот ответ наиболее близок к «духу» того, о чем я просил, спасибо.
Совют

1
+1, хороший ответ. Есть ли способ использовать возвращаемое значение, чтобы оно не отображалось? Я получаю «0» после запуска ясно.
техно-

15
Определите его в обычной функции вместо лямбды, которая не должна показывать '0', поскольку возвращаемое значение будет None.
Акбар Ибрагим

46
Что не так с использованием def? Зачем использовать, lambdaкогда defяснее?
С.Лотт

17
@Akbaribrahim, поскольку None не будет напечатан, попробуйте это:clear = lambda: os.system('cls') or None
enpenax

193

здесь что-то удобное, немного более кроссплатформенное

import os

def cls():
    os.system('cls' if os.name=='nt' else 'clear')

# now, to clear the screen
cls()

Отличный способ добиться цели, объедините это с предложением лямбда-выражения выше, чтобы сохранить ряд кода, удобный, как ад! Спасибо! :)
Torxed

import os os.system('cls')
До Нху Вы

1
Переменная окружения TERM не установлена.
Джонатан

87

Ну, вот быстрый взлом:

>>> clear = "\n" * 100
>>> print clear
>>> ...do some other stuff...
>>> print clear

Или, чтобы сохранить набор текста, поместите этот файл в путь поиска Python:

# wiper.py
class Wipe(object):
    def __repr__(self):
        return '\n'*1000

wipe = Wipe()

Тогда вы можете сделать это из переводчика все, что вам нравится :)

>>> from wiper import wipe
>>> wipe
>>> wipe
>>> wipe

12
Хаха, это довольно забавно. Не совсем то, что я искал, но хорошая попытка.
Совют

4
@Triptych: c = "\ n" * 100 полезно, +1 за это. Небольшой комментарий, который он очищает и приводит к нижней части оболочки, я предпочитаю начинать с верхней части оболочки.
pythonbeginer

1
Или, если ваш эмулятор терминала интерпретирует ANSI, лучше сделайте:"\x1B[H\x1B[J"
Альба Мендес

8
Несмотря на смех людей, печать множества новых строк - это именно то, что внешние процессы clearи clsделают. Это является способ сделать это. (просто print или функция с вызовом print, конечно же, без привязки к «чистой» строке)
jsbueno

4
@ jsbueno нет, это не так. Ну, может быть, на Windows (хотя я сомневаюсь, у него есть API для очистки консоли). Во всех других системах clearвыводит директиву, которая очищает экран. Без уничтожения буфера прокрутки. В моей системе, она выводит эту управляющую последовательность: \33[3J\33[H\33[2J. То есть: [erase scrollback] [reset cursor position] [erase screen]. [erase scrollback]Может быть опущен с помощью clear -x.
спектры

28

Хотя это более старый вопрос, я подумал, что я хотел бы добавить что-то, суммирующее, как мне кажется, лучшие из других ответов, и добавить свою собственную морщинку, предложив поместить эти команды в файл и настроить PYTHONSTARTUP. переменная окружения, чтобы указать на него. Поскольку я сейчас нахожусь на Windows, это слегка предвзято, но может быть легко изменено в другом направлении.

Вот некоторые статьи, которые я нашел и которые описывают, как устанавливать переменные среды в Windows:
    когда достаточно использовать sys.path.append и при изменении% PYTHONPATH%
    Как управлять переменными среды в Windows XP
    Настройка системных переменных и переменных среды пользователя
    Как использовать глобальную систему Переменные среды в Windows

Кстати, не ставьте кавычки вокруг пути к файлу, даже если в нем есть пробелы.

В любом случае, вот мой взгляд на код для вставки (или добавления в существующий) сценарий запуска 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 ====

Кстати, вы также можете использовать трюк @ Triptych, __repr__ чтобы изменить его exit()на just exit(и то же самое для его псевдонима quit):

class exit(object):
    exit = exit # original object
    def __repr__(self):
        self.exit() # call original
        return ''

quit = exit = exit()

И, наконец, здесь что - то другое , что изменяет основной интерпретатор быстрого от >>>до УХА + >>>:

class Prompt:
    def __str__(self):
        import os
        return '%s >>> ' % os.getcwd()

import sys
sys.ps1 = Prompt()
del sys
del Prompt

Вероятно, это лучший ответ - комбинация техник из других ответов. PYTHONSTARTUP + repr + os.system ('cls'). Очень хорошо.
Триптих

@Triptych: Один интересный побочный эффект использования __repr__и / или __str__этого способа заключается в том, что если вы печатаете >>> vars()на консоли переводчика, он выполнит все команды, определенные таким образом. Например, в моей системе он очистил экран и вышел из консоли. Мне
потребовалось

интересный. Я вижу, что эта проблема также относится к locals()и globals(). Простой декоратор вокруг этих функций, который удаляет имя и переназначает его после вызова функции, является возможным решением ...
Триптих

@Triptych: Идея декоратора, похоже, не работает, по крайней мере, с моими собственными попытками. Придумать жизнеспособную альтернативу - удивительно сложно.
Мартино

У меня есть вариант решения, который просто временно обрабатывает результаты вызовов vars () globals () и locals (): gist.github.com/4172781
Triptych

28

У вас есть несколько способов сделать это в Windows:

1. Использование сочетания клавиш:

Press CTRL + L

2. Используя метод системного вызова:

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

3. Используя новую строку, напечатайте 100 раз:

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

5
Все эти способы довольно ... наф. clsбудет работать только на Windows и сделает вашу программу трудной для кроссплатформенности, печать 100 newlines- это просто ... eww? И сочетание клавиш не используется в программе.
Люк

22

Самый быстрый и простой способ, без сомнения, Ctrl+ L.

Это то же самое для OS X на терминале.


3
Я попробовал это решение, используя прописные или строчные буквы "L" с клавишей Ctrl на Windows 8.1. Это не работает для меня. Я просто открываю и закрываю окно оболочки, чтобы очистить его.
Chris22

2
В OS X Ctrl + L будет заполнять терминал до тех пор, пока дисплей не станет четким. Вы все еще можете прокрутить вверх, чтобы увидеть историю. Используйте Cmd + K, чтобы очистить историю отображения и распечатки. Более полный список горячих клавиш для терминала OS X
Эндрю Франклин

2
Прекрасно работай для меня в Ubuntu Desktop 16
Nam G VU

15

Мой способ сделать это - написать такую ​​функцию:

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

затем позвоните, clear()чтобы очистить экран. это работает на Windows, OSX, Linux, BSD ... все операционные системы.


Вы можете иметь в виду os.name in ('linux','osx'), а также, возможно, захотите добавить 'posix'.
rsanden

@rsanden 'linux' и 'osx' охватывает практически всех людей, работающих с ОС.
MartinUbuntu

Я использую Ubuntu 15.04, и os.name == 'posix'в обоих Python 2.7.9 и 3.4.3
rsanden

@rsanden добавил posix.
MartinUbuntu

9

Вот кроссплатформенный (Windows / Linux / Mac /, вероятно, другие, которые вы можете добавить в проверке if) фрагмент кода, который я сделал, объединяя информацию, найденную в этом вопросе:

import os
clear = lambda: os.system('cls' if os.name=='nt' else 'clear')
clear()

Та же идея, но с ложкой синтаксического сахара:

import subprocess   
clear = lambda: subprocess.call('cls||clear', shell=True)
clear()

8

Wiper - это круто, хорошо, что мне не нужно вводить '()' вокруг него. Вот небольшое изменение к этому

# wiper.py
import os
class Cls(object):
    def __repr__(self):
        os.system('cls')
        return ''

Использование довольно просто:

>>> cls = Cls()
>>> cls # this will clear console.

2
Я бы назвал это class cls.
Мартино

1
Я бы назвал экземпляр, class Clsчтобы быть cls. cls = Cls()
Amol

За исключением того, что загрязняет исходное пространство имен двумя вещами вместо одной ... вдвое больше.
Мартино

@Amol Я использовал твои и чужие методы в своем решении . Вы можете сделать class clsи тогда cls=cls().
Альба Мендес

8

Это самая простая вещь, которую вы можете сделать, и она не требует дополнительных библиотек. Он очистит экран и вернется >>>в верхний левый угол.

print("\033[H\033[J")

Преимущество в том, что он также работает в Spyder.
Грэм Г


5

Вот окончательное решение, которое объединяет все остальные ответы . Особенности:

  1. Вы можете скопировать код в свою оболочку или скрипт.
  2. Вы можете использовать его как хотите:

    >>> clear()
    >>> -clear
    >>> clear  # <- but this will only work on a shell
  3. Вы можете импортировать его как модуль:

    >>> from clear import clear
    >>> -clear
  4. Вы можете назвать это как скрипт:

    $ python clear.py
  5. Это действительно мультиплатформенный ; если он не может распознать вашу систему
    ( ce, nt, dosили posix) он будет падать обратно на печать пустых строк.


Вы можете скачать [полный] файл здесь: https://gist.github.com/3130325
Или, если вы просто ищете код:

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

5

Я не уверен, поддерживает ли это «оболочка» Windows, но в Linux:

print "\033[2J"

https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes

На мой взгляд , призывающей clsс osплохой идеей вообще. Представьте себе, если мне удастся изменить команду cls или clear в вашей системе, и вы запустите свой скрипт с правами администратора или root.


Я согласен, что cls не идеален в этом случае, и escape-последовательность ANSI лучше. В частности, использование os для вызова нового процесса является довольно дорогой операцией по сравнению с передачей нескольких байтов в стандартный вывод.
Сильвиот


4

Используйте вхолостую. У него много удобных функций. Ctrl+F6, например, сбрасывает консоль. Закрытие и открытие консоли - хороший способ ее очистить.


как ты делаешь это на холостом ходу? Просто закрыть и открыть?
Андреа Амбу

5
Нет, F6не сбрасывает консоль холостого хода, однако CTRL+F6делает. К сожалению, это не очищает экран. D'о! (Python Win32 Idle версии 2.6.2, 2.7.1, 3.2).
Ridgerunner

2

Я использую MINGW / BASH в Windows XP, SP3.

(вставьте это в .pythonstartup)
# Мой ctrl-l уже работал, но это может помочь кому-то еще
# оставляет подсказку в нижней части окна, хотя ...
import readline
readline.parse_and_bind ('\ Cl: clear-screen')

# Это работает в BASH, потому что у меня это тоже есть в .inputrc, но по какой-то
причине # оно сбрасывается, когда я захожу в Python
readline.parse_and_bind ('\ Cy: kill-whole-line')


Я больше не мог набирать 'exit ()' и был в восторге от трюков Мартино / Триптиха:

Я немного подправил его (воткнул в .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

Команда ОС clearв Linux и clsв Windows выводит «волшебную строку», которую вы можете просто напечатать. Чтобы получить строку, выполните команду с помощью popen и сохраните ее в переменной для дальнейшего использования:

from os import popen
with popen('clear') as f:
    clear = f.read()

print clear

На моей машине строка есть '\x1b[H\x1b[2J'.


1
1) Эта волшебная строка является последовательностью ANSI . \x1b[Hозначает «переместить курсор в верхний левый угол», \x1b[2Jозначает «очистить весь экран». 2) В Windows ANSI не распознается, поэтому, вероятно, нет какой-либо волшебной строки.
Альба Мендес

1
Прохладно! Кроме того, для печати на python3 ('\ x1b [H \ x1b [2J', end = ''); может помочь избежать новой линии впереди.
DenMark

Волшебная нить работала на консоли Microsoft Windows 10 с Python 3.6 для меня. Я добавил для последовательности строк не использование с открытым.
DevPlayer

2

Вот два хороших способа сделать это:

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

Если os.name не является ни одним из них, почему бы не вернуться к печати пустых строк?
Альба Мендес

Если это Jython, то я хочу, чтобы вы знали, что os.name = 'java'
iChux

Выглядит хорошо, значит ли это, что программа может стать кроссплатформенной?
Люк



1

Это должно быть кроссплатформенным, а также использовать предпочтительный, subprocess.callа не os.systemв соответствии с os.systemдокументами . Должно работать в Python> = 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

Как насчет этого для ясного

- os.system('cls')

Это так коротко, как могло бы быть!


да, но не мультиплатформенный, и вам придется перепечатывать его каждый раз, когда вы хотите очистить экран.
Альба Мендес

1

Я новичок в python (действительно действительно новый) и в одной из книг, которые я читаю, чтобы познакомиться с языком, которому они учат, как создать эту маленькую функцию, чтобы очистить консоль от видимого отставания и прошлых команд и печатных изданий:

Открыть оболочку / Создать новый документ / Создать функцию следующим образом:

def clear():
    print('\n' * 50)

Сохраните его в папке lib в вашем каталоге python (у меня C: \ Python33 \ Lib). В следующий раз, когда вам понадобится очистить консоль, просто вызовите функцию с помощью:

clear()

Это оно. PS: вы можете назвать свою функцию так, как хотите. Я видел людей, использующих «wiper», «wipe» и вариации.


1

Я использую Spyder (Python 2.7) и для очистки консоли переводчика я использую либо

%Чисто

это заставляет командную строку идти наверх, и я не буду видеть предыдущие старые команды.

или я нажимаю «опция» в среде консоли и выбираю «Перезапустить ядро», которое удаляет все.


1

Я мог бы опоздать на часть, но вот очень простой способ сделать это

Тип:

def cls():
    os.system("cls")

Так что когда вы хотите очистить экран, просто введите свой код

cls()

Лучший способ возможен! (Предоставлено: https://www.youtube.com/watch?annotation_id=annotation_3770292585&feature=iv&src_vid=bguKhMnvmb8&v=LtGEp9c6Z-U ).



1

Если вам не нужно делать это с помощью кода, просто нажмите CTRL + L


Да, это работает, но что если вы захотите сделать в своем файле python команду, которая очищает консоль, вы не просто заставите пользователя что-то набирать, а затем скажете им, чтобы он сам это очистил. Вы бы очистили консоль через код.
Madladzen

1

Arch Linux (протестирован xfce4-terminalс Python 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'")

... добавлен к ~/.pythonrc

  • clear() очищает экран
  • wipe() стирает весь терминальный буфер

0

РЕДАКТИРОВАТЬ: Я только что прочитал «Windows», это для пользователей Linux, извините.


В Баш:

#!/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

Сохраните его как "whatyouwant.sh", затем выполните chmod + x:

./whatyouwant.sh python

или что-то иное, чем Python (без дела, что угодно). Это спросит вас, действительно ли вы хотите выйти, если нет, повторно запустите python (или команду, которую вы указали в качестве параметра).

Это очистит все, экран и все переменные / объект / все, что вы создали / импортировали в python.

В python просто введите exit (), когда вы хотите выйти.


0

Хорошо, так что это гораздо менее технический ответ, но я использую плагин Python для Notepad ++, и оказывается, что вы можете просто очистить консоль вручную, щелкнув правой кнопкой мыши по ней и нажав «очистить». Надеюсь, это поможет кому-то там!

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