python gimp gimpfu

Escribiendo plugins de gimp en Python en Windows, ¿cómo puedo depurar? ¿Dónde está la salida?



gimpfu (3)

EDITADO DE FORMA PESADA con información nueva (y una recompensa)

Estoy tratando de crear un plug in en python para gimp. (en Windows) esta página http://gimpbook.com/scripting/notes.html sugiere ejecutarla desde el shell o ver ~ / .xsession-errors

ni trabajo Soy capaz de ejecutarlo desde el shell cmd, como

gimp-2.8.exe -c --verbose ## (como sugiere http://gimpchat.com/viewtopic.php?f=9&t=751 )

esto hace que la salida de "pdb.gimp_message (...)" vaya a un terminal.

PERO !!! esto solo funciona cuando todo se ejecuta como se esperaba, no obtengo resultados en los bloqueos.

He intentado imprimir declaraciones, no van a ninguna parte.

este otro tipo tenía un problema similar, pero la discusión se desvió. Los complementos por lo general no funcionan, ¿cómo depuro?

en algunos lugares vi recomendaciones para ejecutarlo desde la consola de python-fu.

Esto no me lleva a ninguna parte. Necesito comentar a importar gimpfu, ya que genera errores y no consigo que gtk funcione.

Mi problema actual es que incluso si el complemento se registra y se muestra en el menú, cuando hay algún error y no se comporta como se esperaba, no sé por dónde empezar a buscar sugerencias. (He intentado hacer clic en todo tipo de contextos, sin selección, sin imagen).

Pude copiar y ejecutar complementos de ejemplo de http://gimpbook.com/scripting/ y obtuve el trabajo, pero cuando un cambio hago algo, no sé qué, y modifico un programa existente línea por línea Es tedioso. (Gimp debe cerrarse y reiniciarse cada vez)

así que para resumir -

1- ¿Puedo actualizar un plugin sin reiniciar gimp? (Así que al menos mi lento morph será más rápido)

2- Puedo ejecutar plug-ins desde la shell de python-fu. (a diferencia de solo importarlos para asegurarse de que se analizan).

3- ¿Hay un registro de errores que me falta, o algo parecido?

4- ¿Hay una manera de ejecutar gimp en Windows desde una shell para ver la salida? (¿Estoy mejor bajo cygwin (o virtualbox ..))?

5- Todavía no he buscado cómo conectar winpdb a un proceso existente. ¿Cómo podría conectarlo a un proceso de python que se ejecuta dentro de gimp?

Gracias


1- ¿Puedo actualizar un plugin sin reiniciar gimp? (Así que al menos mi lento morph será más rápido)

Debe reiniciar GIMP cuando agregue un script o cambie el registro (). No es necesario reiniciar al cambiar otras partes de la secuencia de comandos: se ejecuta como un proceso separado y se volverá a leer desde el disco cada vez.

fuente útil: http://gimpbook.com/scripting/notes.html

2- Puedo ejecutar plug-ins desde la shell de python-fu. (a diferencia de solo importarlos para asegurarse de que se analizan).

Sí, puedes acceder a tu complemento registrado en la consola de python-fu como:

>>> pdb.name_of_registerd_plug-in

Y puedo llamarlo como:

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

También en la consola de diálogo de python-fu , puede hacer clic para buscar la opción Browse .. y encontrar su complemento registrado, y luego hacer clic en Apply , para importarlo a la consola de python-fu .

fuente útil: http://registry.gimp.org/node/28434

3- ¿Hay un registro de errores que me falta, o algo parecido?

Para iniciar sesión, puede definir una función como esta:

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

Y úsalo en tu código, cuando quieras.

Para ver el registro de eso, en el programa gimp , abra la Error Console desde Dockable Dialogs en Windows menú de Windows , de lo contrario aparecerá un cuadro de mensaje cada vez que realice un registro.

También puedes redireccionar stdin y stdout a un archivo ,:

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

Cuando haga eso, todas las exceptions irán a err.txt y todas las copias se irán a log.txt Tenga en cuenta que abra el archivo con a opción en lugar de w para mantener el archivo de registro.

fuentes útiles:

¿Cómo envío información a la consola en un script de Python de Gimp?

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

4- ¿Hay una manera de ejecutar gimp en Windows desde una shell para ver la salida? (¿Estoy mejor bajo cygwin (o virtualbox ..))?

Tengo un error por eso, pero puedo intentarlo de nuevo ...

5- Todavía no he buscado cómo conectar winpdb a un proceso existente. ¿Cómo podría conectarlo a un proceso de python que se ejecuta dentro de gimp?

Primero instale winpdb , y también wxPython (la GUI de Winpdb depende de wxPython)

Tenga en cuenta que Gimp tiene su propio intérprete de python, y es posible que desee instalar winpdb en su intérprete de python predeterminado o en el intérprete de python de gimp.

Si instala winpdb en su intérprete de python predeterminado, entonces necesita copiar el archivo instalado rpdb2.py a ../Lib/site-packages de la ruta del intérprete de gimp python.

Después de eso, deberías poder importar el módulo pdb2 desde la consola Python-Fu de 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 >>>

Ahora en su código de complemento, por ejemplo, en su función principal agregue el siguiente código:

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

A continuación, vaya a gimp y ejecute su complemento de Python, cuando ejecute su complemento, se ejecutará y luego esperará cuando llegue al código anterior.

Ahora, para abrir la Winpdb GUI vaya a ../PythonXX/Scripts y ejecute winpdb_.pyw .

(Tenga en cuenta que cuando use Winpdb para la depuración remota, asegúrese de que el firewall en el camino tenga el puerto TCP 51000 abierto. Tenga en cuenta que si se toma el puerto 51000, Winpdb buscará un puerto alternativo entre 51000 y 51023).

Luego, en la Winpdb GUI del menú File , seleccione attach y Winpdb GUI contraseña, y luego podrá ver su script de plug-in en esa lista, selecciónelo e inicie su depuración paso a paso.

recurso útil: Instalar PyGIMP en Windows

Fuentes útiles:

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


Soy un novato en python, pero me gustaría dar un saludo, primero a winpdb, y luego a este comentario para integrar winpdb en GIMP. Este mismo procedimiento funciona también para LibreOffice 4.

Si se me permite desahogarme un poco; Tengo una experiencia moderada con Visual Basic, más o menos a un nivel más atractivo, pero hace algunos años decidí ingresar a OpenOffice cuando MicroSoft amenazó con abandonar VB para Mac. No quiero decir que VB en OpenOffice fue oneroso, pero la falta de algo parecido a un IDE es tediosa. Ahora, con winpdb, nunca miraré hacia atrás. Es pitón de aquí en adelante, bebé.

Pasos tomados:

- Como lo sugirió Omid anteriormente, primero obtuve winpdb sin GIMP (relativamente indoloro).

- Copié el archivo rpdb2.py a C: / Archivos de programa / LibreOffice 4 / program / python-core-3.3.3 / lib / site-packages / rpdb2.py. (Win 7, LibreOffice 4.4.03)

- Edité el archivo HelloWorld.py en el directorio C: / Archivos de programa / LibreOffice 4 / share / Scripts / python (guardado en WinPDb_HelloWorld.py en el mismo directorio).

# 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 aparece en LibreOffice Macros en el Selector de macros (consulte https://wiki.openoffice.org/wiki/Python_as_a_macro_language para más información).

(No puedo mostrarte una foto - publicar como invitado)