Files
baijiahao_data_crawl/venv/Lib/site-packages/mitmproxy/utils/vt_codes.py

61 lines
1.7 KiB
Python
Raw Normal View History

2025-12-25 11:16:59 +08:00
"""
This module provides a method to detect if a given file object supports virtual terminal escape codes.
"""
import os
import sys
from typing import IO
if os.name == "nt":
from ctypes import byref # type: ignore
from ctypes import windll # type: ignore
from ctypes.wintypes import BOOL
from ctypes.wintypes import DWORD
from ctypes.wintypes import HANDLE
from ctypes.wintypes import LPDWORD
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
# https://docs.microsoft.com/de-de/windows/console/getstdhandle
GetStdHandle = windll.kernel32.GetStdHandle
GetStdHandle.argtypes = [DWORD]
GetStdHandle.restype = HANDLE
# https://docs.microsoft.com/de-de/windows/console/getconsolemode
GetConsoleMode = windll.kernel32.GetConsoleMode
GetConsoleMode.argtypes = [HANDLE, LPDWORD]
GetConsoleMode.restype = BOOL
# https://docs.microsoft.com/de-de/windows/console/setconsolemode
SetConsoleMode = windll.kernel32.SetConsoleMode
SetConsoleMode.argtypes = [HANDLE, DWORD]
SetConsoleMode.restype = BOOL
def ensure_supported(f: IO[str]) -> bool:
if not f.isatty():
return False
if f == sys.stdout:
h = STD_OUTPUT_HANDLE
elif f == sys.stderr:
h = STD_ERROR_HANDLE
else:
return False
handle = GetStdHandle(h)
console_mode = DWORD()
ok = GetConsoleMode(handle, byref(console_mode))
if not ok:
return False
ok = SetConsoleMode(
handle, console_mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING
)
return ok
else:
def ensure_supported(f: IO[str]) -> bool:
return f.isatty()