为什么subprocess.Popen无法正确识别命令?

时间:2017-11-01 06:47:27

标签: windows python-3.x cmd subprocess imagemagick-convert

我正在尝试执行" *。py"脚本(在CMD的控制台中由" python * .py"),其中包含以下代码("转换"是ImageMagick的命令):

from subprocess import Popen
fp1 = 'convert'+' '+'Pictures\1110.6437v3.pdf[7]'+' '+'-thumbnail'+' '+'x156'+' '+'thumb.png'
print("fp1=", fp1)
pp = Popen(fp1)

我在控制台窗口中获得以下输出和错误:

  

fp1 =转换图片\ 1110.6437v3.pdf [7] -thumbnail   x156 thumb.png

     

参数无效 - -thumbnail

很奇怪,因为如果我在CMD中输入以下命令:

  

convert 1110.6437v3.pdf [7] -thumbnail x156 thumb.png

没关系。

1 个答案:

答案 0 :(得分:0)

我不是子进程或Python的专家。我刚刚涉足它。我认为你的fp1语法可能有误。它不应该是带逗号的方括号(至少在Python 3.6中)。见https://docs.python.org/3/library/subprocess.html

但是以下内容适用于我运行ImageMagick命令来创建字母的图像" P"在Mac OSX上的Python 3.6中。

import subprocess

cmd = '/usr/local/bin/convert -size 30x40 xc:white -fill white -fill black -font Arial -pointsize 40 -gravity South -draw "text 0,0 \'P\'" /Users/fred/desktop/draw_text2.gif'

subprocess.call(cmd, shell=True)


使用shell = True允许不必解析命令的每个部分。例如,如果shell = False,我将不得不这样做

import subprocess

cmd = ['/usr/local/bin/convert','-size','30x40','xc:white','-fill','white','-fill','black','-font','Arial','-pointsize','40','-gravity','South','-draw',"text 0,0 'P'",'/Users/fred/desktop/draw_text1.gif']

subprocess.call(cmd, shell=False)