浏览代码

Ignore --external-downloader-args if --external-downloader was rejected

... and generate warning
dirkf 3 年之前
父节点
当前提交
49c5293014
共有 2 个文件被更改,包括 13 次插入1 次删除
  1. 10 1
      youtube_dl/YoutubeDL.py
  2. 3 0
      youtube_dl/downloader/__init__.py

+ 10 - 1
youtube_dl/YoutubeDL.py

@@ -1906,8 +1906,17 @@ class YoutubeDL(object):
 
 
         if not self.params.get('skip_download', False):
         if not self.params.get('skip_download', False):
             try:
             try:
+                def checked_get_suitable_downloader(info_dict, params):
+                    ed_args = params.get('external_downloader_args')
+                    dler = get_suitable_downloader(info_dict, params)
+                    if ed_args and not params.get('external_downloader_args'):
+                        # external_downloader_args was cleared because external_downloader was rejected
+                        self.report_warning('Requested external downloader cannot be used: '
+                                            'ignoring --external-downloader-args.')
+                    return dler
+
                 def dl(name, info):
                 def dl(name, info):
-                    fd = get_suitable_downloader(info, self.params)(self, self.params)
+                    fd = checked_get_suitable_downloader(info, self.params)(self, self.params)
                     for ph in self._progress_hooks:
                     for ph in self._progress_hooks:
                         fd.add_progress_hook(ph)
                         fd.add_progress_hook(ph)
                     if self.params.get('verbose'):
                     if self.params.get('verbose'):

+ 3 - 0
youtube_dl/downloader/__init__.py

@@ -50,6 +50,9 @@ def _get_suitable_downloader(info_dict, params={}):
         ed = get_external_downloader(external_downloader)
         ed = get_external_downloader(external_downloader)
         if ed.can_download(info_dict):
         if ed.can_download(info_dict):
             return ed
             return ed
+        # Avoid using unwanted args since external_downloader was rejected
+        if params.get('external_downloader_args'):
+            params['external_downloader_args'] = None
 
 
     protocol = info_dict['protocol']
     protocol = info_dict['protocol']
     if protocol.startswith('m3u8') and info_dict.get('is_live'):
     if protocol.startswith('m3u8') and info_dict.get('is_live'):