Безопасно очистить консоль

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

os.system('cls' if os.name == 'nt' else 'clear')

Но на os жалуется dlint что это НЕ безопасный вариант. И советует использовать "subprocess"

Я пробую subprocess.run('cls', shell=True)

И теперь dlint жалуется что использовать shell=True не безопасно!

Я ставлю shell=False - Мой код не работает...

Как безопасно очистить консоль? Спасибо за любую полезную информацию!


Ответы (1 шт):

Автор решения: eri

Включить совместимость с vt100 и чистить эскейпом.

if os.name == 'nt':
    import ctypes
    kernel32 = ctypes.windll.kernel32
    kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)

print("\x1Bc" or "\x1b[2J", end='', flush=True)

Где 7 = ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING, а -11 = open('r'\\.\CONOUT$'').fileno().

Интересно как оно поведет себя в gitbash и powershell - проверьте - отпишитесь в комментах.

→ Ссылка