Python, ImageMagick и `subprocess` - PullRequest
       4

Python, ImageMagick и `subprocess`

2 голосов
/ 16 февраля 2011

Я пытаюсь собрать изображения с помощью вызова ImageMagick montage из скрипта Python, например:

 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

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011

JD уже дал вам решение, но вы не внимательно его прочитали;)

Это неверно:

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

Это правильно:

subprocess.call( ['montage', '-tile', '9x6', '-geometry', '+0+0', '*.png', 'out.png'] )
3 голосов
/ 16 февраля 2011

Вместо [command, args] вы должны передать ['montage', '-tile', '{}x{}'.format(...), '-geometry'...] в качестве первого аргумента. Вам также может понадобиться shell=True.

0 голосов
/ 16 февраля 2011

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)) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...