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

СИЛЬНО ОТРЕДАКТИРОВАНО с некоторой новой информацией (и щедростью)

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

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

gimp-2.8.exe -c --verbose ## (согласно http://gimpchat.com/viewtopic.php?f=9&t=751 )

это приводит к тому, что вывод из "pdb.gimp_message(...)" отправляется на терминал.

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

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

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


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

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


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

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


так что подытожим -

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

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

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

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

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

Благодарность


person vish    schedule 24.12.2013    source источник


Ответы (3)


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

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

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

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

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

>>> pdb.name_of_registerd_plug-in

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

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

Также в диалоговой консоли python-fu вы можете щелкнуть параметр Browse .. и найти зарегистрированный плагин, а затем нажать Apply , чтобы импортировать его в консоль python-fu.

полезный источник: http://registry.gimp.org/node/28434

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

Для регистрации вы можете определить такую ​​функцию:

def gimp_log(text):
    pdb.gimp_message(text)

И используйте его в своем коде, когда захотите.

Чтобы просмотреть журнал этого, в программе gimp откройте 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 Обратите внимание, что откройте файл с опцией a вместо w, чтобы сохранить файл журнала.

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

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

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

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

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

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

Сначала установите winpdb , а также wxPython (GUI Winpdb зависит от wxPython)

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

Если вы устанавливаете 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 в качестве пароля, после чего вы увидите скрипт вашего плагина в этом списке, выберите его и начните отладку шаг за шагом.

отладка плагина python gimp с помощью 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

person Omid Raha    schedule 03.01.2014

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

добавлять

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

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

person vish    schedule 03.01.2014

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

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

Предпринятые шаги:

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

-- Я скопировал файл rpdb2.py в C:\Program Files\LibreOffice 4\program\python-core-3.3.3\lib\site-packages\rpdb2.py. (Победа 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» в селекторе макросов (см. /a> чтобы узнать больше об этом).

(не могу показать фото - публикую как гость)

person John_L    schedule 27.09.2015