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

325

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

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

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

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

Soviut
источник
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()
POPCNT
источник
Отличный способ добиться цели, объедините это с предложением лямбда-выражения выше, чтобы сохранить ряд кода, удобный, как ад! Спасибо! :)
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 ... все операционные системы.

MartinUbuntu
источник
Вы можете иметь в виду 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()
Pitto
источник
8

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

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

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

>>> cls = Cls()
>>> cls # this will clear console.
Amol
источник
2
Я бы назвал это class cls.
Мартино
1
Я бы назвал экземпляр, class Clsчтобы быть cls. cls = Cls()
Amol
За исключением того, что загрязняет исходное пространство имен двумя вещами вместо одной ... вдвое больше.
Мартино
@Amol Я использовал твои и чужие методы в своем решении . Вы можете сделать class clsи тогда cls=cls().
Альба Мендес
8

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

print("\033[H\033[J")
Денис Расулев
источник
Преимущество в том, что он также работает в Spyder.
Грэм Г
7

для пользователя Mac внутри консоли типа Python

import os
os.system('clear')

для окон

os.system('cls')
Юбарадж Пудель
источник
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 для вызова нового процесса является довольно дорогой операцией по сравнению с передачей нескольких байтов в стандартный вывод.
Сильвиот
5

Я использую iTerm и родное терминальное приложение для Mac OS.

Я просто нажимаю ⌘ + k

Хорхе Э. Эрнандес
источник
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
AAAfarmclub
источник
2

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

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

print clear

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

larsr
источник
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()
userend
источник
Если os.name не является ни одним из них, почему бы не вернуться к печати пустых строк?
Альба Мендес
Если это Jython, то я хочу, чтобы вы знали, что os.name = 'java'
iChux
Выглядит хорошо, значит ли это, что программа может стать кроссплатформенной?
Люк
2

Если это на Mac, то простой cmd + kдолжен сделать свое дело.

CoderChai
источник
2

Самый простой способ - использовать модуль os

>>> import os
>>> clear = lambda: os.system('clear')
>>> clear()
Бхаскар Мишра
источник
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» и вариации.

Adriana
источник
1

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

%Чисто

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

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

Юнесс
источник
1

Просто введите

import os
os.system('cls') # Windows
os.system('clear') # Linux, Unix, Mac OS X
анонимное
источник
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 ++, и оказывается, что вы можете просто очистить консоль вручную, щелкнув правой кнопкой мыши по ней и нажав «очистить». Надеюсь, это поможет кому-то там!

guest12345
источник