从Python3开始,我需要调用application并传递几个参数,其中一个是
700x500\>
所以我这样做:
rule_template=r"{}x{}{}"
factor = r"\>"
rule = rule_template.format(700,500,factor)
cmd = ["mogrify", "-resize", rule]
for file in os.listdir(folder):
if file.endswith(".jpg") or file.endswith(".png"):
ff = os.path.join(folder, file)
subprocess.check_call(cmd + [ff])
应用程序失败,因为它收到的参数看起来像
700x500\\>
如何避免输出中的双斜线。同样,它不仅仅是屏幕上的""功能,我打电话给错误的命令。
这是失败的full函数。
这是错误行:
subprocess.CalledProcessError: Command '['mogrify', '-resize', '100x5\\>', '/tmp/111/de0b8660-b132-4874-b898-1ab4d4a24375/001.jpg']' returned non-zero exit status 1.
如果我更换"因素"变量与空""
,应用程序工作,但不做我需要它。
应用程序用法示例:
mogrify -resize 100x5\> 001.jpg
答案 0 :(得分:3)
你的问题是你不需要反斜杠。如果你是从shell调用它,
mogrify -resize 700x500\>
是正确的,因为需要转义>
以防止shell将其解释为输出重定向字符。但是,您(正确地)将一个单独的参数列表传递给check_call
,绕过shell。 mogrify
本身只需要字符串700x500>
,所以您需要的只是
rule_template = "{}x{}{}"
factor = ">"
rule = rule_template.format(700, 500, factor)
cmd = ["mogrify", "-resize", rule]
for file in os.listdir(folder):
if file.endswith(".jpg") or file.endswith(".png"):
ff = os.path.join(folder, file)
subprocess.check_call(cmd + [ff])
调用check_call
的具体示例是
subprocess.check_call(["mogrify", "-resize", "700x500>", "foo.jpg"])
完全不相关,您只需要拨打一次endswith
,因为它可能需要一个预期的扩展元组:
if file.endswith((".jpg", ".png")):