Python使用subprocess.run调用SumatraPDF打印时参数传递异常如何解决
问题原因
你当前写法的问题在于:使用列表形式传递命令参数时,每个列表项对应一个独立的命令行参数,你把双引号直接写在了-print-settings的参数内容中,导致实际传给SumatraPDF的配置参数自带多余的双引号,程序无法正常识别。同时列表传参场景下不需要开启shell=True,反而会额外增加转义风险。
解决方法
方案1(推荐,无需启用shell)
把-print-settings和对应的配置拆成两个独立的列表项,不需要额外加双引号:
import subprocess args = [ 'SumatraPDF.exe', '-print-to-default', '-silent', '-exit-on-print', '-print-settings', 'landscape,1,5x', 'qrcode_and_date.pdf' ] subprocess.run(args, check=True)
check=True参数会在命令执行失败时主动抛出异常,方便排查问题,不需要可以删除。
方案2(必须使用shell=True的场景)
直接传递完整的命令字符串即可:
import subprocess cmd = 'SumatraPDF.exe -print-to-default -silent -exit-on-print -print-settings "landscape,1,5x" qrcode_and_date.pdf' subprocess.run(cmd, shell=True, check=True)
内容的提问来源于stack exchange,提问作者radekb
相关产品推荐
相关产品推荐

