如何使Python调用忽略特殊字符

时间:2017-09-17 13:35:01

标签: python special-characters

从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

1 个答案:

答案 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")):