diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2023-01-01 14:11:14 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2023-01-01 14:11:14 +0530 |
commit | 1cdda3299810b86206853a22e680758eadcc4e05 (patch) | |
tree | 558c623621c41f51462f170c6b0d8dc01bc5bcfe | |
parent | 3e01ce744a981d8f19ae77ec695005e7000f4703 (diff) | |
download | hypervideo-pre-1cdda3299810b86206853a22e680758eadcc4e05.tar.lz hypervideo-pre-1cdda3299810b86206853a22e680758eadcc4e05.tar.xz hypervideo-pre-1cdda3299810b86206853a22e680758eadcc4e05.zip |
[utils] `get_exe_version`: Detect broken executables
Authored by: dirkf, pukkandan
Closes #5561
-rw-r--r-- | yt_dlp/utils.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py index 32da598d0..5af176b36 100644 --- a/yt_dlp/utils.py +++ b/yt_dlp/utils.py @@ -2720,8 +2720,10 @@ def _get_exe_version_output(exe, args): # STDIN should be redirected too. On UNIX-like systems, ffmpeg triggers # SIGTTOU if yt-dlp is run in the background. # See https://github.com/ytdl-org/youtube-dl/issues/955#issuecomment-209789656 - stdout, _, _ = Popen.run([encodeArgument(exe)] + args, text=True, - stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + stdout, _, ret = Popen.run([encodeArgument(exe)] + args, text=True, + stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + if ret: + return None except OSError: return False return stdout @@ -2739,11 +2741,15 @@ def detect_exe_version(output, version_re=None, unrecognized='present'): def get_exe_version(exe, args=['--version'], - version_re=None, unrecognized='present'): + version_re=None, unrecognized=('present', 'broken')): """ Returns the version of the specified executable, or False if the executable is not present """ + unrecognized = variadic(unrecognized) + assert len(unrecognized) in (1, 2) out = _get_exe_version_output(exe, args) - return detect_exe_version(out, version_re, unrecognized) if out else False + if out is None: + return unrecognized[-1] + return out and detect_exe_version(out, version_re, unrecognized[0]) def frange(start=0, stop=None, step=1): |