2011-02-15 94 views
2

我試圖從Python腳本像這樣ImageMagick的montage呼叫組裝圖片:的Python,ImageMagick的和`subprocess`

command = "montage" 
args = "-tile {}x{} -geometry +0+0 \"*.png\" out.png".format(width, height) 
sys.stdout.write(" {} {}\n".format(command, args)) 
print subprocess.call([command, args]) 

然而,蒙太奇只顯示用法。如果我手動運行命令,一切正常。 ImageMagick應該支持Windows中的文件名匹配,所以* .png被擴展了。 但顯然,這種行爲被subprocess壓制。 我是否必須使用glob才能給montage提供文件名列表?

更多信息 到目前爲止感謝。但是,即使當我使用:

command = "montage" 
tile = "-tile {}x{}".format(width, height) 
geometry = "-geometry +0+0" 
infile = "*.png" 
outfile = "out.png" 
sys.stdout.write(" {} {} {} {} {}\n".format(command, tile, geometry, infile, outfile)) 
print [command, tile, geometry, infile, outfile] 
#~ print subprocess.call([command, tile, geometry, infile, outfile]) 
print subprocess.call(['montage', '-tile 9x6', '-geometry +0+0', '*.png', 'out.png']) 

我得到一個錯誤:

Magick: unrecognized option `-tile 9x6' @ error/montage.c/MontageImageCommand/1631. 

我在Windows 7中,ImageMagick的6.6.5-7 2010-11-05 Q16 http://www.imagemagick.org,Python 2.7版

+0

問題仍然存在ImageMagick-6.6.7-7-Q16-windows-dll.exe。 – none 2011-02-15 22:16:54

+0

注意錯誤消息'

+0

'-tile'和'widthxheight'必須是兩個不同的列表項。命令行中由空格分隔的所有內容都是一樣的。列表項中應該存在的唯一空格是那些如果要直接運行命令就會轉義的空間。 – 2011-02-15 22:53:39

回答

3

而不是[command, args],您應該通過['montage', '-tile', '{}x{}'.format(...), '-geometry'...]作爲第一個參數。您也可能需要shell=True

0

subprocess.call期望整個命令被拆分成一個列表(每個參數作爲列表的一個單獨的元素)。嘗試:

import shlex 
command = "montage" 
args = "-tile {}x{} -geometry +0+0 \"*.png\" out.png".format(width, height) 
subprocess.call(shlex.split('{} {}'.format(command, args))) 
3

JD已經給你解決,但你沒有仔細閱讀它;)

這是不正確的:

subprocess.call(['montage', '-tile 9x6', '-geometry +0+0', '*.png', 'out.png']) 

這是正確的:

subprocess.call(['montage', '-tile', '9x6', '-geometry', '+0+0', '*.png', 'out.png'])