Python - более элегантная очистка экрана терминала

1

Я знаю, что вы можете очистить оболочку, выполнив clear с помощью os.system, но этот способ кажется мне довольно запутанным, так как команды регистрируются в истории и интерпретируются как литерно, как команды, выполняемые как пользователь ОС.

Я хотел бы знать, есть ли лучший способ очистить вывод в командной строке script?

  • 0
    в качестве отступления ... clear не является кроссплатформенной командой iirc, она будет работать только в Windows (я думаю, cls работает в Linux)
  • 2
    @JoranBeasley: все наоборот: clear , хотя и не утилита POSIX, это утилита, доступная на большинстве Unix-подобных платформ; cls - это встроенная команда командного процессора Windows, cmd.exe .
Показать ещё 1 комментарий
Теги:
terminal
clear

3 ответа

2
Лучший ответ
print "\033c"

работает в моей системе.

Вы также можете кэшировать escape-последовательность четкого экрана, создаваемую командой clear:

import subprocess
clear_screen_seq = subprocess.check_output('clear')

затем

print clear_screen_seq

в любое время, когда вы хотите очистить экран.

tput clear команда, которая создает ту же последовательность, определенную в POSIX.

Вы можете использовать curses, чтобы получить последовательность:

import curses
import sys

clear_screen_seq = b''
if sys.stdout.isatty():
    curses.setupterm()
    clear_screen_seq = curses.tigetstr('clear')

Преимущество заключается в том, что вам не нужно вызывать curses.initscr(), который требуется для получения объекта окна, который имеет методы .erase(), .clear().

Чтобы использовать тот же источник как для Python 2, так и для 3, вы можете использовать функцию os.write():

import os
os.write(sys.stdout.fileno(), clear_screen_seq)
Команда

clear в моей системе также пытается очистить буфер прокрутки с помощью tigetstr("E3").

Здесь находится полный порт Python команды clear.c:

#!/usr/bin/env python
"""Clear screen in the terminal."""
import curses
import os
import sys

curses.setupterm()
e3 = curses.tigetstr('E3') or b''
clear_screen_seq = curses.tigetstr('clear') or b''
os.write(sys.stdout.fileno(), e3 + clear_screen_seq)
3

Вы можете использовать интерфейс Python для ncurses, в частности window.erase и window.clear.

https://docs.python.org/3.5/library/curses.html

1

Я использую 2 оператора печати, чтобы очистить экран.

Очищает экран:

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

Перемещает курсор в начало строки 1 столбец 1:

print(chr(27) + "[1;1f")

Мне нравится этот метод, потому что вы можете перемещать курсор в любом месте по [<row>;<col>f

Chr (27) - это escape-символ, а материал в кавычках указывает терминалу, что делать.

  • 0
    Хорошая вещь; для упрощения рассмотрим использование встроенной восьмеричной escape-последовательности \033 вместо синтеза вашей строки с помощью chr(27) + ... ; например, print("\033[1;1f")
  • 0
    Просто любопытно, зачем использовать восьмеричное вместо шестнадцатеричного?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню