aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/YoutubeDL.py3
-rw-r--r--yt_dlp/compat.py11
-rw-r--r--yt_dlp/utils.py3
3 files changed, 14 insertions, 3 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index e953916d5..bd1d01584 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -3393,7 +3393,8 @@ class YoutubeDL(object):
def get_encoding(stream):
ret = getattr(stream, 'encoding', 'missing (%s)' % type(stream).__name__)
if not supports_terminal_sequences(stream):
- ret += ' (No ANSI)'
+ from .compat import WINDOWS_VT_MODE
+ ret += ' (No VT)' if WINDOWS_VT_MODE is False else ' (No ANSI)'
return ret
encoding_str = 'Encodings: locale %s, fs %s, out %s, err %s, pref %s' % (
diff --git a/yt_dlp/compat.py b/yt_dlp/compat.py
index 8508f1465..79c8e3494 100644
--- a/yt_dlp/compat.py
+++ b/yt_dlp/compat.py
@@ -160,12 +160,20 @@ except ImportError:
compat_pycrypto_AES = None
+WINDOWS_VT_MODE = False if compat_os_name == 'nt' else None
+
+
def windows_enable_vt_mode(): # TODO: Do this the proper way https://bugs.python.org/issue30075
if compat_os_name != 'nt':
return
+ global WINDOWS_VT_MODE
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
- subprocess.Popen('', shell=True, startupinfo=startupinfo)
+ try:
+ subprocess.Popen('', shell=True, startupinfo=startupinfo)
+ WINDOWS_VT_MODE = True
+ except Exception:
+ pass
# Deprecated
@@ -226,6 +234,7 @@ compat_xml_parse_error = etree.ParseError
# Set public objects
__all__ = [
+ 'WINDOWS_VT_MODE',
'compat_HTMLParseError',
'compat_HTMLParser',
'compat_HTTPError',
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index 9172151f0..0ca7ed738 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -6592,7 +6592,8 @@ def jwt_decode_hs256(jwt):
def supports_terminal_sequences(stream):
if compat_os_name == 'nt':
- if get_windows_version() < (10, 0, 10586):
+ from .compat import WINDOWS_VT_MODE # Must be imported locally
+ if not WINDOWS_VT_MODE or get_windows_version() < (10, 0, 10586):
return False
elif not os.getenv('TERM'):
return False