我怎样才能在os.system cmd命令中处理“'?

时间:2015-03-02 12:51:10

标签: python imagemagick

我使用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

2 个答案:

答案 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}}