我想使用'convert'调整多张图像的大小。
这在命令行中效果很好。
但是,当我尝试使用subprocess.Popen在Python3中实现相同功能时,标志为'\!'指定在调整大小时应忽略图像的宽高比,这是行不通的。
从 我想要 并不是
在命令行中,使用以下命令可以正常工作
convert source.png -resize 1230x80\! out_console.png
如果我使用以下命令从Python3内部运行此命令
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from subprocess import Popen
cmd = [
'convert',
'source.png',
'-resize',
r'1230x80\!', # Use '\!' ignoring the aspect ratio
'out_subprocess.png',
]
proc = Popen(cmd)
proc.communicate()
结果未调整大小:
我尝试使用r'1230x80\!'
或'1230x80\\!'
转义反斜杠字符,但没有成功。
答案 0 :(得分:1)
!
需要转义,因为您正在外壳中运行。但是命令本身不理解\
,并且Popen
不使用外壳程序(除非您使用shell=True
,但要避免像瘟疫一样)
所以你只是在做这个。
相反,传递参数时不要引号或转义:
cmd = [
'convert',
'source.png',
'-resize',
'1230x80!',
'out_subprocess.png',
]
现在您有了一个可移植的命令行,该命令行甚至可以在Windows上使用(嗯,在Windows上有一个convert
命令,它根本不会执行相同的操作,因此您必须指定该命令的完整路径convert
命令)
答案 1 :(得分:0)
除了accepted answer: 问题本质上是:
将Shell命令转换为非Shell命令。
有一个library解决了这一任务。
import shlex
shlex.split('convert source.png -resize 1230x80\! out_console.png')
给予
['convert', 'source.png', '-resize', '1230x80!', 'out_console.png']