[pp:exec] support more replacement fields for '--exec' (#4633)
- {_directory}
- {_filename}
- {_path} (alias for {})
This commit is contained in:
@@ -510,6 +510,8 @@ def build_parser():
|
||||
dest="postprocessors", metavar="CMD",
|
||||
action=AppendCommandAction, const={"name": "exec"},
|
||||
help=("Execute CMD for each downloaded file. "
|
||||
"Supported replacement fields are "
|
||||
"{} or {_path}, {_directory}, {_filename}. "
|
||||
"Example: --exec \"convert {} {}.png && rm {}\""),
|
||||
)
|
||||
postprocessor.add_argument(
|
||||
@@ -518,7 +520,8 @@ def build_parser():
|
||||
action=AppendCommandAction, const={
|
||||
"name": "exec", "event": "finalize"},
|
||||
help=("Execute CMD after all files were downloaded successfully. "
|
||||
"Example: --exec-after \"cd {} && convert * ../doc.pdf\""),
|
||||
"Example: --exec-after \"cd {_directory} "
|
||||
"&& convert * ../doc.pdf\""),
|
||||
)
|
||||
postprocessor.add_argument(
|
||||
"-P", "--postprocessor",
|
||||
|
||||
@@ -12,6 +12,7 @@ from .common import PostProcessor
|
||||
from .. import util, formatter
|
||||
import subprocess
|
||||
import os
|
||||
import re
|
||||
|
||||
|
||||
if util.WINDOWS:
|
||||
@@ -32,6 +33,7 @@ class ExecPP(PostProcessor):
|
||||
args = options["command"]
|
||||
if isinstance(args, str):
|
||||
self.args = args
|
||||
self._sub = re.compile(r"\{(_directory|_filename|_path|)\}").sub
|
||||
execute = self.exec_string
|
||||
else:
|
||||
self.args = [formatter.parse(arg) for arg in args]
|
||||
@@ -69,11 +71,8 @@ class ExecPP(PostProcessor):
|
||||
if archive and archive.check(pathfmt.kwdict):
|
||||
return
|
||||
|
||||
if pathfmt.realpath:
|
||||
args = self.args.replace("{}", quote(pathfmt.realpath))
|
||||
else:
|
||||
args = self.args.replace("{}", quote(pathfmt.realdirectory))
|
||||
|
||||
self.pathfmt = pathfmt
|
||||
args = self._sub(self._replace, self.args)
|
||||
self._exec(args, True)
|
||||
|
||||
if archive:
|
||||
@@ -90,5 +89,13 @@ class ExecPP(PostProcessor):
|
||||
self.log.debug("Running '%s'", args)
|
||||
subprocess.Popen(args, shell=shell)
|
||||
|
||||
def _replace(self, match):
|
||||
name = match.group(1)
|
||||
if name == "_directory":
|
||||
return quote(self.pathfmt.realdirectory)
|
||||
if name == "_filename":
|
||||
return quote(self.pathfmt.filename)
|
||||
return quote(self.pathfmt.realpath)
|
||||
|
||||
|
||||
__postprocessor__ = ExecPP
|
||||
|
||||
Reference in New Issue
Block a user