Написание плагинов gimp в python в windows - как отлаживать? где выход?

сильно отредактировано с некоторой новой информацией (и щедростью)

Я пытаюсь создать плагин в Python для gimp. (в Windows) эта страница http://gimpbook.com/scripting/notes.html предлагает запустить его из оболочки или посмотреть на~/.xsession теперь-ошибки

не работает. Я могу запустить его из оболочки cmd, как

gimp-2.8.exe-c --verbose ## (как предложено http://gimpchat.com/viewtopic.php?f=9&t=751 )

Это вызывает вывод из " pdb.gimp_message(...)" идти к терминалу.

но !!! это работает только тогда , когда все работает так, как ожидалось, я не получаю выходных данных о сбоях.

Я пробовал печатать заявления, они никуда не идут.

У этого другого парня была аналогичная проблема, но обсуждение было отложено. Плагины обычно не работают, как отлаживать?


в некоторых местах я видел рекомендации запустите его из консоли python-fu.

Это никуда меня не приведет. мне нужно прокомментировать импорт gimpfu, так как он вызывает ошибки, и я не получаю работу gtk.


моя текущая проблема заключается в том, что даже если плагин регистрируется и отображается в меню, когда есть какая-то ошибка, и она не ведет себя так, как ожидалось, я не знаю, с чего начать искать подсказки . (я пробовал нажимать во всех контекстах, без выбора, С без изображения. )

Я смог копировать и выполнять примеры плагинов изhttp://gimpbook.com/scripting/ и я получил, работая, но когда изменение я делаю перерывы что-то, я не знаю, что, и морфинг существующей программы строка за строкой утомительно .(gimp должен быть выключен и восстановлен каждый раз)


Итак, подводя итог -

1-могу ли я обновить плагин без перезапуска gimp ? (так, по крайней мере, мой медленный морфинг будет быстрее )

2-Могу ли я запускать плагины с python-fu ракушка. (в отличие от простого импорта, чтобы убедиться, что они анализируются.)

3 - Есть ли журнал ошибок, который я пропустил, или что-то в этом роде?

4-Есть ли способ запустить gimp в windows из оболочки, чтобы увидеть вывод ? (мне лучше под cygwin (или virtualbox.. ))?

5 - я еще не смотрел как подключить winpdb к существующему процессу. как я могу подключить его к процессу python, который работает внутри gimp?

спасибо

3 ответов


1-могу ли я обновить плагин без перезапуска gimp ? (так по крайней мере мой медленный морфинг будет быстрее)

вы должны перезапустить GIMP при добавлении скрипта или изменить register (). Нет необходимости перезапускать при изменении других частей скрипта-он запускается как отдельный процесс и будет перечитываться с диска каждый раз.

полезный источник: http://gimpbook.com/scripting/notes.html

2 - я может работать плагины из оболочки python-fu. (в отличие от просто импортируя их, чтобы убедиться, что они анализируются.)

Да, вы можете получить доступ к зарегистрированному плагину python-fu консоль as:

>>> pdb.name_of_registerd_plug-in

и может назвать это так:

>>> pdb.name_of_registerd_plug-in(img, arg1, arg2, ...)

и в python-fu диалоговое окно консоли, вы можете нажать на Browse .. опция и найти зарегистрированный плагин, а затем нажмите Apply , чтобы импортировать его в , открытого Error Console С Dockable Dialogs на Windows меню, в противном случае окно сообщения будет всплывать каждый раз, когда вы делаете бревно.

также вы можете перенаправить stdin и stdout файл:

import sys
sys.stderr = open('er.txt', 'a')
sys.stdout = open('log.txt', 'a')

когда вы это делаете, все exceptions пойдет err.txt и все распечатки будут идти к log.txt Обратите внимание, что открыть файл вместо w сохранить файл журнала.

полезные источники:

как вывести информацию на консоль в Gimp на языке Python сценарий?

http://www.exp-media.com/content/extending-gimp-python-python-fu-plugins-part-2

4-Есть ли способ запустить gimp в windows из оболочки, чтобы увидеть вывод ? (мне лучше под cygwin (или virtualbox.. ))?

я получил некоторую ошибку для этого, но может попробовать еще раз ...

5-я еще не посмотрел, как подключить winpdb к существующему процесс. как я буду жить? подключение его к процессу python, который работает в gimp?

установить winpdb , а также wxPython, в (WINPDB GUI зависит от wxPython)

обратите внимание, что Gimp имеет собственный интерпретатор python, и вы можете установить winpdb к интерпретатору python по умолчанию или интерпретатору GIMP python.

при установке winpdb в интерпретатор python по умолчанию, затем вам нужно скопировать rpdb2.py установлен файл к ..\Lib\site-packages пути интерпретатора GIMP python.

после этого вы должны иметь возможность импортировать pdb2 модуль Python-Fu консоль gimp:

GIMP 2.8.10 Python Console
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)]
>>> import rpdb2
>>>

теперь в коде плагина, например, в вашей основной функции добавьте следующий код:

import rpdb2 # may be included out side of function.
rpdb2.start_embedded_debugger("pass") # a password that will asked by winpdb

затем перейдите в gimp и запустите плагин python, когда вы запустите плагин, он будет работать, а затем ждать, когда достигнете кода выше.

открыть Winpdb GUI на ..\PythonXX\Scripts и запустить winpdb_.pyw.

(обратите внимание, что при использовании Winpdb для удаленной отладки убедитесь, что любые брандмауэр в пути открыт TCP-порт 51000. Обратите внимание, что если порт 51000 взят, Winpdb будет искать альтернативный порт между 51000 и 51023.)

затем в Winpdb GUI С File меню выберите attach и pass в качестве пароля к нему, а затем вы можете увидеть свой плагин скрипт в этом списке, выберите его и запустите шаг отладки шаг.

debug python gimp plugin with Winpdb

полезный ресурс: установка PyGIMP на Windows

полезное источники:

http://wiki.gimp.org/index.php/Hacking:Plugins

http://www.gimp.org/docs/python/index.html

http://wiki.elvanor.net/index.php/GIMP_Scripting

http://www.exp-media.com/gimp-python-tutorial

http://coderazzi.net/python/gimp/pythonfu.html

http://www.ibm.com/developerworks/opensource/library/os-autogimp/os-autogimp-pdf.pdf


Как отметил в Как вывести информацию на консоль в Gimp скрипт Python?

добавить

import sys
sys.stderr = open( 'c:\temp\gimpstderr.txt', 'w') 
sys.stdout = open( 'c:\temp\gimpstdout.txt', 'w')

в начале файла подключаемого модуля.


Я новичок в python, но я хотел бы дать крик, сначала winpdb, а затем к этому комментарию для интеграции winpdb в GIMP. Эта же процедура работает и для LibreOffice 4.

Если мне будет позволено немного выпустить пар; у меня есть умеренный опыт работы с Visual Basic, более или менее на самом высоком уровне, но я решил несколько лет назад попасть в OpenOffice, когда MicroSoft угрожала отказаться от VB для Mac. Я не хочу говорить, что VB в OpenOffice был обременительным, но отсутствие чего-либо похожего на IDE утомительно. Теперь, с winpdb, я никогда не буду оглядываться назад. С этого момента это питон, детка.

меры:

-- как было предложено Omid выше, я сначала получил winpdb из GIMP (относительно безболезненно).

-- Я скопировал rpdb2.py файл в C:\Program файлы\LibreOffice 4\program\python-core-3.3.3\lib\site-packages\rpdb2.py - ... (Win 7, LibreOffice 4.4.03)

-- я редактировал в HelloWorld.py файл в C:\Program Files\LibreOffice 4\share\Scripts\python каталог (сохранен в WinPDb_HelloWorld.py в тот же каталог).

# HelloWorld python script for the scripting framework
# This file is part of the LibreOffice project.
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. blah, blah, blah ...

import rpdb2
#rpdb2.start_embedded_debugger("Your Password Here")    # << DON'T start debugger here.
    # It only gets you lost in the LO python wrapper when debugging.

def HelloWorldPython( ):
    """Prints the string 'Hello World(in Python)' into the current document"""

    # start debugger INSIDE function, where it will be called from LO Macros -- Duh!!
    rpdb2.start_embedded_debugger("YourPasswordHere") 

    #get the doc from the scripting context which is made available to all scripts
    desktop = XSCRIPTCONTEXT.getDesktop() 
    #... etc., see HelloWorld.py

WinPDb_HelloWorld отображается под макросами LibreOffice в селекторе макросов (см.https://wiki.openoffice.org/wiki/Python_as_a_macro_language подробнее об этом).

(Не могу показать вам фотографию - размещение в качестве гостя)