2015-03-12 3 views
2

Я пытаюсь найти простой способ выполнить написанный мной сценарий Python-Fu, который работает в однопоточном режиме из плагина интерпретатора Python-Fu Gimp но больше не будет работать при преобразовании в его многопроцессорный эквивалент из-за ограничений Windows, отличных от POSIX/OS.Fork, которые появляются в Pool.map_async(). Как работа вокруг, я пытаюсь вызвать скрипт непосредственно из командной строки cmd, но не могу понять правильную команду, чтобы сделать это. У меня есть каталог бен каркасного на моем переменном PATH, и я пытаюсь получить что-то достигнуто, как следующее ...Как выполнить скрипт Python-Fu из оболочки через Gimp

c:\>gimp-console-2.8 --no-interface --batch "(python-fu execfile('myPyFuScript.py'))" 
c:\>gimp-console-2.8 --no-interface --batch "myPyFuScript.py" 

Есть ли способ, чтобы получить Gimp выполнить питон скрипт, используя свой модуль Python-Fu из команда, выпущенная в командной строке Windows cmd?

Просто для добавили фон я черпаю вдохновение из следующего documentation ...

GIMP Python Воззвание от Shell

Всего это означает, что вы могли бы легко вызвать GIMP Python плагин, такой как тот, который находится выше, непосредственно из вашей оболочки, используя оценщик (плагин-скрипт-фу-эваль ...):

gimp --no-interface --batch '(python-fu-console-echo RUN-NONINTERACTIVE "another string" 777 3.1416 (list 1 0 0))' '(gimp-quit 1)' 

ответ

3

Строка, которую вы передаете GIMP после --batch, сама выполняется в скрипт-фу. Простой способ запуска скрипта Python состоит в том, чтобы написать выражение script-fu, которое вызовет вашу процедуру python. Например:

gimp -n --no-interface --batch "(python-fu-gradient-save-as-css RUN-NONINTERACTIVE \"Sunrise\" \"/tmp/grad.css\")" --batch "(gimp-quit 1)" 

Кроме использования выражения скрипта-фу "(python-fu-gradient-save-as-css ...)" следует отметить следующее:

  • использование -n для обеспечения его запуск в новом экземпляре GIMP (может быть, это вообще не нужен - он работал для меня здесь)
  • Использование двойных кавычек (") для разграничения строковых параметров в строке скрипта-fu. Одиночные кавычки имеют различный синтаксический смысл в схеме/script-fu.
  • необходимо позвонить gimp-quit 1 - в противном случае, даже с --no-interface --batch, GIMP продолжает работать.

Так как вы будете называть GIMP из сценария Python наружного видного, спасаясь от " это не проблема - но людям, призывающих его из командной строки в Windows, придется найти творческий способ сделать это. (Выше, они сбегают в оболочке bash с \)

Это должно ответить на ваш вопрос. Тем не менее, я буду копать немного дальше: , если обработка, которую вы делаете в своем скрипте, действительно тяжелая, накладные расходы на вызов отдельного экземпляра GIMP для каждого вызова сценария могут быть огромными (я не измерял использование памяти - он занимает около 2 секунд за вызов на моем i5-устройстве без SSD после того, как задача будет надлежащим образом кэширована ОС - так что вы тоже можете жить с ней).

Но мой подход к нему, поскольку производительность является проблемой, заключалась бы в написании процедуры GIMP-Python для создания экземпляра сервера XMLRPC (или JSONRPC) и внешнего контрольного сценария для вызова «реальных» процедур через RPC.Использование XMLRPC в Python легко - менее 10 строк шаблона кода вы можете в основном копировать и вставлять непосредственно из документов модуля в http://python.org. Таким образом, вы могли бы подготовить пул процессов GIMO для выполнения своей задачи простым простым быстрым вызовом RPC (один GIMP для каждого логического ядра, и вам нужно поместить некоторую логику в управляющий скрипт для циклического вызова/очереди вызовов, конечно).

Смежные вопросы