21

大量编辑了一些新信息(和赏金)

我正在尝试为 gimp 创建一个 python 插件。(在 Windows 上)这个页面http://gimpbook.com/scripting/notes.html建议从 shell 运行它,或者查看 ~/.xsession-errors

既不工作。我可以从 cmd shell 运行它,如

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 shell 运行插件吗?(而不是仅仅导入它们以确保它们解析。)

3-是否有我遗漏的错误日志,或类似的东西?

4-有没有办法从shell在windows上运行gimp来查看输出?(在cygwin(或virtualbox ..)下我会更好吗)?

5-我还没有查找如何将 winpdb 连接到现有进程。我将如何将它连接到在 gimp 中运行的 python 进程?

谢谢

4

3 回答 3

25

1-我可以在不重新启动 gimp 的情况下刷新插件吗?(所以至少我的慢变会更快)

添加脚本或更改 register() 时必须重新启动 GIMP。更改脚本的其他部分时无需重新启动——它作为一个单独的进程运行,并且每次都会从磁盘重新读取。

有用的来源: http: //gimpbook.com/scripting/notes.html

2-我可以从 python-fu shell 运行插件吗?(而不是仅仅导入它们以确保它们解析。)

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,否则每次创建日志时都会弹出一个消息框。

你也可以重定向stdinstdout一个文件,:

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-有没有办法从shell在windows上运行gimp来查看输出?(在cygwin(或virtualbox ..)下我会更好吗)?

我有一些错误,但可以再试一次......

5-我还没有查找如何将 winpdb 连接到现有进程。我将如何将它连接到在 gimp 中运行的 python 进程?

首先安装winpdbwxPython(Winpdb GUI 依赖于 wxPython)

请注意,它Gimp有自己的 python 解释器,您可能想安装winpdb到默认的 python 解释器或 gimp python 解释器。

如果您安装winpdb到默认的 python 解释器,则需要将rpdb2.py安装的文件复制到..\Lib\site-packagesgimp python 解释器路径。

之后,您应该能够从gimp 的控制台导入pdb2模块:Python-Fu

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
>>>

现在在您的插件代码中,例如在您的 main 函数中添加以下代码:

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 GUIFile菜单中选择attachpass为其提供密码,然后您可以在该列表中看到您的插件脚本,选择它并逐步开始调试。

使用 Winpdb 调试 python gimp 插件

有用的资源: 在 Windows 上安装 PyGIMP

有用的资源:

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

于 2014-01-03T14:46:09.010 回答
4

如何在 Gimp python 脚本中将信息输出到控制台?

添加

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

在插件文件的开头。

于 2014-01-03T06:47:34.073 回答
2

我是 python 的新手,但我想大声喊出,首先是 winpdb,然后是这个将 winpdb 集成到 GIMP 的评论。同样的过程也适用于 LibreOffice 4。

如果可以让我发泄一下;我对 Visual Basic 有一定的经验,或多或少处于最业余的水平,但几年前,当微软威胁要放弃 Mac 上的 VB 时,我决定进入 OpenOffice。我不想说 OpenOffice 中的 VB 很繁重,但是缺少任何类似 IDE 的东西是很乏味的。现在,有了 winpdb,我再也不会回头了。从这里开始就是蟒蛇了,宝贝。

采取的步骤:

- 正如上面 Omid 所建议的,我首先让 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)

-- 我在 C:\Program Files\LibreOffice 4\share\Scripts\python 目录中编辑了 HelloWorld.py 文件(保存在 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)。

(不能给你看图片 - 以访客身份发帖)

于 2015-09-27T13:51:56.893 回答