python - Python 使用 subprocess.run 和参数运行 exe
问题描述
我正在尝试使用 Sumatra pdf 使用 python 脚本将 pdf 发送到标签打印机。不幸的是,指定副本数和方向的双引号 ('-print-settings "landscape,1,5x"') 似乎没有正确传递。
import subprocess
arg = ['SumatraPDF.exe','-print-to-default','-silent','-exit-on-print','-print-settings "landscape,1,5x"','qrcode_and_date.pdf']
subprocess.run(arg, shell=True)
应如何正确格式化此命令以获得所需的结果。
任何帮助深表感谢。谢谢你。
解决方案
通常你应该把它作为两个单独的元素放在列表中'-print-settings'
并且'"landscape,1,5x"'
import subprocess
arg = [
'SumatraPDF.exe',
'-print-to-default',
'-silent',
'-exit-on-print',
'-print-settings',
'"landscape,1,5x"',
'qrcode_and_date.pdf'
]
subprocess.run(arg)
但是如果你使用shell=True
那么你应该把所有作为一个字符串
import subprocess
arg = 'SumatraPDF.exe -print-to-default -silent -exit-on-print -print-settings "landscape,1,5x" qrcode_and_date.pdf'
subprocess.run(arg, shell=True)
至少在 Linux 上你必须以这种方式使用它。
顺便提一句:
你可以简单地使用split()
这个
import subprocess
arg = 'SumatraPDF.exe -print-to-default -silent -exit-on-print -print-settings "landscape,1,5x" qrcode_and_date.pdf'
arg = arg.split()
subprocess.run(arg) # without `shell=True`
但是如果里面有空格,"landscape, 1, 5x"
那么它会创建包含三个元素的错误列表,'"landscape', '1', '5x"'
因此文档建议使用shlex.split()
import subprocess
import shlex
arg = 'SumatraPDF.exe -print-to-default -silent -exit-on-print -print-settings "landscape,1,5x" qrcode_and_date.pdf'
arg = shlex.split(arg)
subprocess.run(arg) # without `shell=True`
推荐阅读
- xml - 如何在 XSLT 中选择除 p 之外的任何节点
- azure - 任何人都为 SAS 设置了仅在 HTTPS 中访问以进行存储访问的策略?
- python - 如何使用 matplotlib 创建径向柱形图
- c - 使用 execvp() 分离和执行命令行参数
- json - 如何使用 Groovy 去除 JSON 中的斜线
- python - 尝试将数据库中的项目放入 Tkinter 中的列表框时出错
- r - gam.vcomp 可以用于估计在具有 gaulss 家族的 GAM 中解释的部分偏差吗?
- html - 悬停时动画 2 侧边框
- parallel-processing - 为什么我会出现这种行为?
- javascript - 带有数据库承诺的javascript递归函数