Написание плагинов gimp в python на windows - как отлаживать? где выход?
EDITED HEAVILY с некоторой новой информацией (и щедростью)
Я пытаюсь создать подключаемый модуль в python для gimp. (по окнам)
эта страница 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.
Моя текущая проблема заключается в том, что даже если плагин регистрируется и отображается в меню, когда есть некоторая ошибка, и он не ведет себя так, как ожидалось, я не знаю, с чего начать искать подсказки.
(я попытался щелкнуть во всех контекстах, w - без выбора, без изображения).
Я смог скопировать и выполнить пример плагинов из http://gimpbook.com/scripting/
и я получил, работая, но когда изменение, которое я делаю, что-то ломает, я не знаю, что и морфинг существующей программы по строчке утомительно. (gimp нужно отключать и восстанавливать каждый раз)
поэтому подытожим -
1- можно обновить плагин без перезагрузки gimp? (так что хотя бы мой медленный морф будет быстрее)
2- можно запускать плагины из оболочки python-fu. (а не просто импортировать их, чтобы убедиться, что они анализируются.)
3 - есть ли ошибка, которую я не вижу, или что-то в этом роде?
4- есть ли способ запустить gimp на окна из оболочки, чтобы увидеть результат? (мне лучше в cygwin (или virtualbox..))?
5- я еще не посмотрел, как подключить winpdb к существующему процессу. как я могу связать его с процессом python, который работает внутри gimp?
спасибо
Ответы
Ответ 1
1- можно обновить плагин без перезагрузки gimp? (так, по крайней мере, мой slow-morph будет быстрее)
Вы должны перезапустить GIMP при добавлении script или изменить регистр().
Не нужно перезапускать при смене других частей script - он запускается как отдельный процесс и будет перечитываться с диска каждый раз.
полезный источник: 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
для сохранения файла журнала.
полезные источники:
Как вывести информацию на консоль в Python Gimp script?
http://www.exp-media.com/content/extending-gimp-python-python-fu-plugins-part-2
4- есть ли способ запустить gimp на окна из оболочки, чтобы увидеть результат? (мне лучше в cygwin (или virtualbox..))?
Я получил некоторую ошибку для этого, но могу попробовать еще раз...
5- я еще не посмотрел, как подключить winpdb к существующему обработать. как я могу связать его с процессом python, который работает внутри gimp?
Сначала установите winpdb, а также wxPython (графический интерфейс Winpdb зависит от wxPython)
Обратите внимание, что gimp
имеет собственный интерпретатор python, и вы можете установить winpdb
на ваш интерпретатор python по умолчанию или на переводчик pimp. 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
в качестве пароля к нему, а затем вы увидите свой плагин script в этом списке, выберите его и запустите шаг отладки шаг за шагом.
![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
Ответ 2
как указано в Как вывести информацию на консоль в Python Gimp script?
добавить
import sys
sys.stderr = open( 'c:\\temp\\gimpstderr.txt', 'w')
sys.stdout = open( 'c:\\temp\\gimpstdout.txt', 'w')
в начале файла подключаемого файла.
Ответ 3
Я новичок в 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. (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).
(не может показать вам изображение - размещение в качестве гостя)