Я знаю, что вы можете очистить оболочку, выполнив clear
с помощью os.system
, но этот способ кажется мне довольно запутанным, так как команды регистрируются в истории и интерпретируются как литерно, как команды, выполняемые как пользователь ОС.
Я хотел бы знать, есть ли лучший способ очистить вывод в командной строке script?
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)
Вы можете использовать интерфейс Python для ncurses, в частности window.erase и window.clear.
Я использую 2 оператора печати, чтобы очистить экран.
Очищает экран:
print(chr(27) + "[2J")
Перемещает курсор в начало строки 1 столбец 1:
print(chr(27) + "[1;1f")
Мне нравится этот метод, потому что вы можете перемещать курсор в любом месте по [<row>;<col>f
Chr (27) - это escape-символ, а материал в кавычках указывает терминалу, что делать.
\033
вместо синтеза вашей строки с помощью chr(27) + ...
; например, print("\033[1;1f")
clear
не является кроссплатформенной командой iirc, она будет работать только в Windows (я думаю,cls
работает в Linux)clear
, хотя и не утилита POSIX, это утилита, доступная на большинстве Unix-подобных платформ;cls
- это встроенная команда командного процессора Windows,cmd.exe
.