【发布时间】:2013-02-07 15:29:35
【问题描述】:
我正在尝试使用 imagemagick 光栅化一些字体,该命令在终端上运行良好:
convert -size 30x40 xc:white -fill white -fill black -font "fonts\Helvetica Regular.ttf" -pointsize 40 -gravity South -draw "text 0,0 'O'" draw_text.gif
使用子进程自动运行相同的命令不起作用:
try:
cmd= ['convert','-size','30x40','xc:white','-fill','white','-fill','black','-font','fonts\Helvetica Regular.ttf','-pointsize','40','-gravity','South','-draw',"text 0,0 'O'",'draw_text.gif']
#print(cmd)
subprocess.check_output(cmd,shell=True,stderr=subprocess.STDOUT)
except CalledProcessError as e:
print(e)
print(e.output)
.
Command '['convert', '-size', '30x40', 'xc:white-fill', 'white', '-fill', 'black', '-font', 'fonts\\Helvetica Regular.ttf', '-pointsize', '40', '-gravity', 'South', '-draw', "text 0,0 'O'", 'draw_text.gif']' returned non-zero exit status 4
b'Invalid Parameter - 30x40\r\n'
【问题讨论】:
-
你为什么用
shell = True运行它? -
@gahooa 出于某种原因,没有
shell=True,我永远无法运行任何东西。我用shell=False尝试过,但这给了我同样的错误。无论如何,这不是不安全的,因为我没有使用任何不受信任的输入。 -
对于初学者,请使用
str.join(' ', cmd)并将其复制并粘贴到命令行,看看它是否仍然有效。 -
@gahooa 如果我引用
fonts\Helve...和text 0,0 'O',那就可以了。我认为这是正常的,因为引号只是因为参数中的空格而存在,并且 shell 在将它们传递给程序之前会去掉引号
标签: python python-3.x imagemagick subprocess imagemagick-convert