[utils] windows_enable_vt_mode: Better error handling

Closes #5927
This commit is contained in:
pukkandan 2023-01-03 11:23:34 +05:30
parent e9df3d42c4
commit f079514957
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39
2 changed files with 10 additions and 8 deletions

View File

@ -586,7 +586,6 @@ class YoutubeDL:
self._playlist_urls = set() self._playlist_urls = set()
self.cache = Cache(self) self.cache = Cache(self)
windows_enable_vt_mode()
stdout = sys.stderr if self.params.get('logtostderr') else sys.stdout stdout = sys.stderr if self.params.get('logtostderr') else sys.stdout
self._out_files = Namespace( self._out_files = Namespace(
out=stdout, out=stdout,
@ -595,6 +594,12 @@ class YoutubeDL:
console=None if compat_os_name == 'nt' else next( console=None if compat_os_name == 'nt' else next(
filter(supports_terminal_sequences, (sys.stderr, sys.stdout)), None) filter(supports_terminal_sequences, (sys.stderr, sys.stdout)), None)
) )
try:
windows_enable_vt_mode()
except Exception as e:
self.write_debug(f'Failed to enable VT mode: {e}')
self._allow_colors = Namespace(**{ self._allow_colors = Namespace(**{
type_: not self.params.get('no_color') and supports_terminal_sequences(stream) type_: not self.params.get('no_color') and supports_terminal_sequences(stream)
for type_, stream in self._out_files.items_ if type_ != 'console' for type_, stream in self._out_files.items_ if type_ != 'console'

View File

@ -5659,7 +5659,6 @@ def windows_enable_vt_mode():
dll = ctypes.WinDLL('kernel32', use_last_error=False) dll = ctypes.WinDLL('kernel32', use_last_error=False)
handle = os.open('CONOUT$', os.O_RDWR) handle = os.open('CONOUT$', os.O_RDWR)
try: try:
h_out = ctypes.wintypes.HANDLE(msvcrt.get_osfhandle(handle)) h_out = ctypes.wintypes.HANDLE(msvcrt.get_osfhandle(handle))
dw_original_mode = ctypes.wintypes.DWORD() dw_original_mode = ctypes.wintypes.DWORD()
@ -5671,15 +5670,13 @@ def windows_enable_vt_mode():
dw_original_mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) dw_original_mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING))
if not success: if not success:
raise Exception('SetConsoleMode failed') raise Exception('SetConsoleMode failed')
except Exception as e:
write_string(f'WARNING: Cannot enable VT mode - {e}')
else:
global WINDOWS_VT_MODE
WINDOWS_VT_MODE = True
supports_terminal_sequences.cache_clear()
finally: finally:
os.close(handle) os.close(handle)
global WINDOWS_VT_MODE
WINDOWS_VT_MODE = True
supports_terminal_sequences.cache_clear()
_terminal_sequences_re = re.compile('\033\\[[^m]+m') _terminal_sequences_re = re.compile('\033\\[[^m]+m')