Как запустить imagemagick в фоновом режиме из python - PullRequest
3 голосов
/ 11 февраля 2012

Как вы можете использовать imagemagick из python, не открывая новое окно командной строки и не теряя фокус?

Этот цикл показывает проблему; система перестает работать при работе с изображениями, потому что вы теряете фокус при каждом системном вызове:

for i in range(0,100,1):
    image = 'convert -background '+'black'+' -fill '+'white'+' -font '+'arial'+' -size '+'50'+'x50'+' -encoding utf8'+' -gravity center caption'+':'+'"just stole your focus"'+' '+'C:/'+'testFile.png'
    os.system(image)

'start / min' или '/ b' только быстро минимизируют окно, поэтому вы все равно теряете фокус. И по какой-то причине я не получаю выходной файл, если я помещаю их перед 'image'.

Есть ли какой-нибудь способ использовать os.system, os.spawnv, subprocess.Popen или другую системную команду для вызова imagemagick в фоновом режиме?

Я читал о PythonMagickWand, но нашел только указания по установке для nix: Привязки Python для ImageMagick MagickWand API

Могу ли я установить / скомпилировать эти привязки под windows? Если да, то как?

Редактировать: решение MRAB:

import os
import subprocess

# Start all the processes.
processes = []
# Define directories
convertDir = 'C:/Program Files/ImageMagick-6.7.5-Q16/convert.exe'
outputDir = 'C:/test/'
outputFileName = 'testFile_look_ma_no_windows_'
if not os.path.exists(outputDir):
    os.makedirs(outputDir)

for i in range(100):
    outputDirFile = outputDir+outputFileName+str(i)+'.png'
    image = convertDir+' '+'-background'+' '+'blue'+' '+'-fill'+' '+'white'+' '+'-font'+' '+'arial,'+' '+'-size '+' '+'50x50'+' '+'-encoding'+' '+'utf8'+' '+'-gravity'+' '+'center'+' '+'caption:"did not steal your focus"'+' '+outputDirFile
    #CREATE_NO_WINDOW Flag: 0x08000000
    p = subprocess.Popen(image, creationflags=0x08000000)
    processes.append(p)

# Wait for all the processes to finish.
# Some may finish faster, so the files are out of order before all are done;
# if you need the files immediately, put p.wait after p = subprocess.Popen
# and comment out lines 5,18,24 and 25
for p in processes:
    p.wait()

print 'Done, created ',str(i+1),' images in ',outputDir

1 Ответ

3 голосов
/ 12 февраля 2012

подпроцессов. Рекомендуется открыть это:

# Start all the processes.
processes = []
for i in range(100):
    p = subprocess.Popen(['convert', '-background', 'black', '-fill', 'white', '-font', 'arial', '-size', '50x50', '-encoding', 'utf8', '-gravity', 'center', 'caption:"just stole your focus"', 'C:/testFile.png'])
    processes.append(p)

# Wait for all the processes to finish.
for p in processes:
    p.wait()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...