aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2021-04-16 00:14:33 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2021-04-16 05:19:44 +0530
commitc6ce81546105d81d5c3fd0e46fa301f8cc372e11 (patch)
tree4c8d1606f6801b33840818c3041f394511c3ebb5
parent79360d99d371c57704fd75ab5e8da69ab6a7b01c (diff)
downloadhypervideo-pre-c6ce81546105d81d5c3fd0e46fa301f8cc372e11.tar.lz
hypervideo-pre-c6ce81546105d81d5c3fd0e46fa301f8cc372e11.tar.xz
hypervideo-pre-c6ce81546105d81d5c3fd0e46fa301f8cc372e11.zip
[Exec] Ensure backward compatibility when the command contains `%`
-rw-r--r--yt_dlp/postprocessor/execafterdownload.py24
1 files changed, 14 insertions, 10 deletions
diff --git a/yt_dlp/postprocessor/execafterdownload.py b/yt_dlp/postprocessor/execafterdownload.py
index 95159cbc2..4a0649680 100644
--- a/yt_dlp/postprocessor/execafterdownload.py
+++ b/yt_dlp/postprocessor/execafterdownload.py
@@ -1,11 +1,13 @@
from __future__ import unicode_literals
+import re
import subprocess
from .common import PostProcessor
from ..compat import compat_shlex_quote
from ..utils import (
encodeArgument,
+ FORMAT_RE,
PostProcessingError,
)
@@ -20,18 +22,20 @@ class ExecAfterDownloadPP(PostProcessor):
def pp_key(cls):
return 'Exec'
- def run(self, info):
- tmpl, info_copy = self._downloader.prepare_outtmpl(self.exec_cmd, info)
- cmd = tmpl % info_copy
- if cmd == self.exec_cmd: # No replacements were made
- if '{}' not in self.exec_cmd:
- self.exec_cmd += ' {}'
- cmd = self.exec_cmd.replace('{}', compat_shlex_quote(info['filepath']))
+ def parse_cmd(self, cmd, info):
+ # If no %(key)s is found, replace {} for backard compatibility
+ if not re.search(FORMAT_RE.format(r'[-\w>.+]+'), cmd):
+ if '{}' not in cmd:
+ cmd += ' {}'
+ return cmd.replace('{}', compat_shlex_quote(info['filepath']))
+
+ tmpl, info_copy = self._downloader.prepare_outtmpl(cmd, info)
+ return tmpl % info_copy
+ def run(self, info):
+ cmd = self.parse_cmd(self.exec_cmd, info)
self.to_screen('Executing command: %s' % cmd)
retCode = subprocess.call(encodeArgument(cmd), shell=True)
if retCode != 0:
- raise PostProcessingError(
- 'Command returned error code %d' % retCode)
-
+ raise PostProcessingError('Command returned error code %d' % retCode)
return [], info