]> jfr.im git - yt-dlp.git/commitdiff
[utils] `windows_enable_vt_mode`: Better error handling
authorpukkandan <redacted>
Tue, 3 Jan 2023 05:53:34 +0000 (11:23 +0530)
committerpukkandan <redacted>
Tue, 3 Jan 2023 10:29:49 +0000 (15:59 +0530)
Closes #5927

yt_dlp/YoutubeDL.py
yt_dlp/utils.py

index 37964169f25cbf92096ab98aa6fc7d904baffd83..1fb44e7f9e00fbeda04ae8fe2c0c6a285da260de 100644 (file)
@@ -586,7 +586,6 @@ def __init__(self, params=None, auto_init=True):
         self._playlist_urls = set()
         self.cache = Cache(self)
 
-        windows_enable_vt_mode()
         stdout = sys.stderr if self.params.get('logtostderr') else sys.stdout
         self._out_files = Namespace(
             out=stdout,
@@ -595,6 +594,12 @@ def __init__(self, params=None, auto_init=True):
             console=None if compat_os_name == 'nt' else next(
                 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(**{
             type_: not self.params.get('no_color') and supports_terminal_sequences(stream)
             for type_, stream in self._out_files.items_ if type_ != 'console'
index a0ae12aeac701718c3405e57fdc161434b990b20..0180954efb94492749091ecbf2ea240196a85419 100644 (file)
@@ -5659,7 +5659,6 @@ def windows_enable_vt_mode():
 
     dll = ctypes.WinDLL('kernel32', use_last_error=False)
     handle = os.open('CONOUT$', os.O_RDWR)
-
     try:
         h_out = ctypes.wintypes.HANDLE(msvcrt.get_osfhandle(handle))
         dw_original_mode = ctypes.wintypes.DWORD()
@@ -5671,15 +5670,13 @@ def windows_enable_vt_mode():
             dw_original_mode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING))
         if not success:
             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:
         os.close(handle)
 
+    global WINDOWS_VT_MODE
+    WINDOWS_VT_MODE = True
+    supports_terminal_sequences.cache_clear()
+
 
 _terminal_sequences_re = re.compile('\033\\[[^m]+m')