我想调整使用“转换”多张图片。
此命令行的伟大工程。
然而,当我尝试使用subprocess.Popen,标志实现了从内Python中相同的“\!”指定该图像的纵横比应该在大小调整期间被忽略,不工作。
从开始我想,而不是
在命令行中使用此工作正常
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\\!'
没有成功反斜杠字符。
!
需要,因为你在一个shell中运行进行转义。但是,命令本身不理解\
,并Popen
不使用shell(除非你使用shell=True
,但要避免像瘟疫)
所以你只是矫枉过正这一点。
相反,传递参数没有引用或转义:
cmd = [
'convert',
'source.png',
'-resize',
'1230x80!',
'out_subprocess.png',
]
现在你有一个可移植的命令行,即使是将工作在Windows上(当然,在Windows上有一个convert
命令,它不会做同样的事情,在所有所以你必须指定convert
命令的完整路径)
除了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']