我使用python os.system调用imagemagick命令为某些图像添加一些文本,代码如下:
os.system("convert -size 2048x2048 xc:transparent -point -fill white -pointsize 75 -draw \"text 50,100 \'thing\'\" C:\\Users\\admin\\Desktop\\test\\output.png")
,
但是,它没有做任何事情。
然后我试图删除字符串中的斜杠,但也没有发生任何事情。似乎os.system
并不擅长引号问题。但我认为应该对这些问题有适当的解决方案。
那么有人可以帮我分析一下这个命令字符串吗?
当然,在命令行中,它运行良好:convert -size 2048x2048 xc:transparent -point -fill white -pointsize 75 -draw "text 50,100 'thing'" C:\\Users\\admin\\Desktop\\test\\output.png
答案 0 :(得分:3)
如果您需要创建复杂字符串,请使用三引号("
或'
)和原始字符串前缀(r
)来阻止转义转义码。此外,subprocess
应优先于os.system
以运行命令。例如
import shlex
import subprocess
cmd = r"""convert -size 2048x2048 xc:transparent -point -fill white
-pointsize 75 -draw "text 50,100 'thing'"
C:\Users\admin\Desktop\test\output.png"""
retcode = subprocess.call(shlex.split(cmd, posix=False))
shlex
会在posix=False
之间保留所有内容,包括双引号。也许这不是你想要的。如果不使用posix=False
,则单个参数"text 50,100 'thing'"
将成为单个参数text 50,100 'thing'
(无双引号)。但是,您需要引用文件名以防止它将\
解释为转义字符。
cmd = r"""convert -size 2048x2048 xc:transparent -point -fill white
-pointsize 75 -draw "text 50,100 'thing'"
'C:\Users\admin\Desktop\test\output.png'"""
retcode = subprocess.call(shlex.split(cmd))
答案 1 :(得分:0)
imagemagick有一个Python API。
当API可用时,不为os.system
落后于使用\'thing\'
执行此类任务。
那就是说,我认为这个问题正在逃避os.system("convert -size 2048x2048 xc:transparent -point -fill white -pointsize 75 -draw \"text 50,100 'thing'\" C:\\Users\\admin\\Desktop\\test\\output.png")
中的单引号,所以这可能有用:
{{1}}