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

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

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

Ответ 1

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

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

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

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

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

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

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

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