Як очистити консоль інтерпретатора?


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

Відповіді:


442

Як ви вже згадували, ви можете зробити системний дзвінок:

Для Windows

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

Для Linux стає лямбда

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

1
Ця відповідь найбільше відповідає «духу» того, про що я просив, дякую.
Радянський

1
+1, приємна відповідь. Чи є спосіб споживати повернене значення, щоб воно не відображалося? Я отримую "0" після того, як ясно закінчується.
техномалогічний

15
Визначте його у звичайній функції замість лямбда, не повинно відображатись "0", оскільки значення повернення буде None.
Акбар ібрагім

46
Що не так з використанням def? Навіщо використовувати a, lambdaколи a defясніше?
S.Lott

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

Чудовий спосіб вирішити справи. Поєднайте це з пропозицією лямбда вище, щоб зберегти рядок коду, зручно як пекло! Дякую! :)
Тортується

import os os.system('cls')
Робити Nhu Vy

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зробити. Це є спосіб зробити це. (звичайно, лише друк або функція з друком, не призначаючи, звичайно, "чітку" рядок)
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

BTW, не ставте лапки навколо шляху до файлу, навіть якщо в ньому є пробіли.

У всякому разі, ось я взяв на себе код, який потрібно вставити (або додати до існуючого) сценарію запуску 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()на справедливий exit(і детіто для його псевдоніма quit):

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

quit = exit = exit()

Нарешті, ось ще щось, що змінює підказку основного перекладача з >>>на cwd + >>>:

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

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

Це, мабуть, найкраща відповідь - поєднання прийомів з інших відповідей. PYTHONSTARTUP + магнезія + os.system ( 'ЦБС'). Дуже хороший.
Триптих

@Triptych: Один цікавий побічний ефект використання __repr__та / або __str__цього способу полягає в тому, що якщо ви введете >>> vars()на консолі інтерпретатора, він виконає всі визначені таким чином команди. Наприклад, у моїй системі він очистив екран, а потім вийшов з консолі. Зайняв мене деякий час, щоб зрозуміти, що, до біса,
йдеться

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

@Triptych: Ідея декоратора, здається, не працює, принаймні з моїх власних спроб. Створити життєздатну альтернативу виявляється напрочуд складно.
мартіно

У мене є рішення кандидата, яке просто перетворює результат викликів vars () globals () та localals
триптих

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
В ОС 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.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()
Амол

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

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


4

Використовуйте простої. Він має багато зручних функцій. Ctrl+F6, наприклад, скидає консоль. Закриття та відкриття консолі - хороші способи її очищення.


як це робити на холостому ходу? Просто закрити і знову відкрити?
Андреа Амбу

5
Ні, F6не скидає консоль очікування, проте CTRL+F6це робить. На жаль, це не очищає екран. D'oh! (Версії Python Win32 Idle 2.6.2, 2.7.1, 3.2).
егергернер

4

Я не впевнений, чи підтримує це "оболонка" Windows, але в Linux:

print "\033[2J"

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

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


Я погоджуюсь, що cls не є ідеальним у цьому випадку, і послідовність аварійного відбору ANSI краще. Зокрема, використання OS для виклику нового процесу є досить привабливою операцією, порівняно з підштовхуванням декількох байтів до stdout.
silviot

2

Я використовую MINGW / BASH для Windows XP, SP3.

(вставте це у .pythonstartup)
# Мій ctrl-l вже працював, але це може допомогти іншому
# залишає підказку внизу вікна, хоча ...
імпортуйте readline
readline.parse_and_bind ('\ Cl: clear-screen')

# Це працює в BASH, тому що в мене він є і в .inputrc, але з якоїсь
# причини він падає, коли я переходжу в Python
readline.parse_and_bind ('\ Cy: kill-full-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 та clsWindows виводить "чарівну рядок", який ви можете просто надрукувати. Щоб отримати рядок, виконайте команду з 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: Ви можете назвати функціонування в будь-якому місці, яке вам захочеться. Iv 'бачив людей, які використовують "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-terminalPython 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

EDIT: Я щойно прочитав "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 просто введіть exit (), коли потрібно вийти.


0

Гаразд, тому це набагато менш технічна відповідь, але я використовую плагін Python для Notepad ++, і виявляється, ви можете просто очистити консоль вручну, клацнувши правою кнопкою миші та натиснувши "очистити". Сподіваюся, це допомагає комусь там!

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