如何调试 GIMP 插件?输出在哪里?

2024-04-20

我正在用 Python 为 Windows 上的 GIMP 制作一个插件。这一页 http://gimpbook.com/scripting/notes.html建议从 shell 运行它或查看 ~/.xsession-errors。都不起作用。我可以从 cmd shell 运行它:

gimp-2.8.exe -c --verbose

From 。这导致输出pdb.gimp_message(...)转到终端,但仅在一切按预期运行时才有效。我在崩溃时没有得到任何输出。我尝试了打印语句,但它们无处可去。This https://stackoverflow.com/questions/18969820/plugins-usually-dont-work-how-do-i-debug是一个类似的问题。

从 Python-Fu 控制台运行它让我一事无成。我需要注释掉import gimpfu因为它会引发错误并且我无法让 GTK 工作。即使插件注册并显示在菜单上,当出现一些错误时我不知道在哪里寻找提示。

  1. 我可以在不重新启动 GIMP 的情况下刷新插件吗?
  2. 我可以从 Python-Fu shell 运行插件而不是导入它们以确保它们解析吗?
  3. 有错误日志吗?
  4. 如何在 Windows 上从 shell 运行 GIMP 以查看输出?我在 Cygwin 还是 VirtualBox 下效果更好?
  5. 如何将 Winpdb 连接到在 GIMP 中运行的 Python 进程?

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

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

有用的来源:http://gimpbook.com/scripting/notes.html 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, ...)

Also in python-fu对话框控制台,您可以单击Browse ..选项并找到您注册的插件, 然后单击Apply,将其导入到python-fu安慰。

有用的来源:http://registry.gimp.org/node/28434 http://registry.gimp.org/node/28434

3-是否有我缺少的错误日志,或者类似的东西?

要记录日志,您可以定义如下函数:

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

并随时在您的代码中使用它。

要查看该日志,请在gimp程序,打开Error Console from Dockable Dialogs in Windows菜单,否则每次创建日志时都会弹出一个消息框。

您也可以重定向stdin and stdout到一个文件:

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

当你这样做时,所有的exceptions将会去err.txt所有的打印输出都将转到log.txt请注意,打开文件a选项而不是w保存日志文件。

有用的来源:

如何在 Gimp python 脚本中将信息输出到控制台? https://stackoverflow.com/questions/9955834/how-do-i-output-info-to-the-console-in-a-gimp-python-script

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

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

我遇到了一些错误,但可以再试一次......

5-我还没有查找如何将 winpdb 连接到现有的 过程。我该如何将它连接到一个Python进程 在gimp里面运行?

首次安装winpdb http://winpdb.org/download/,并且wxPython http://www.wxpython.org/(Winpdb GUI 依赖于 wxPython)

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

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

之后您应该能够导入pdb2模块来自Python-Fugimp 控制台:

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 go to ..\PythonXX\Scripts并运行winpdb_.pyw.

(请注意,当使用 Winpdb 进行远程调试时,请确保任何firewall http://winpdb.org/docs/requirements/途中 TCP 端口 51000 打开。请注意,如果端口 51000 被占用,Winpdb 将在 51000 和 51023 之间搜索替代端口。)

Then in Winpdb GUI from File菜单选择attach并给予pass作为密码,然后您可以在该列表中看到您的插件脚本,选择它并逐步开始调试。

有用的资源:在 Windows 上安装 PyGIMP https://stackoverflow.com/questions/14592607/installing-pygimp-on-windows

有用的来源:

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

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调试 GIMP 插件?输出在哪里? 的相关文章

  • 列出类的所有实例

    我编写了一个 Python 模块 其中有几个类继承自一个名为MasterBlock 我想在脚本中导入此模块 创建这些类的多个实例 然后获取该类的所有子级的所有现有实例的列表MasterBlock班级 我找到了一些解决方案vars Block
  • 使用 Flask-restful RequestParser 进行嵌套验证

    使用烧瓶宁静 http flask restful readthedocs org 微框架 我在构建一个RequestParser这将验证嵌套资源 假设预期的 JSON 资源格式为 a list obj1 1 obj2 2 obj3 3 o
  • 如何以 HDF5 格式提供 caffe 多标签数据?

    我想将 caffe 与矢量标签一起使用 而不是整数 我检查了一些答案 似乎 HDF5 是更好的方法 但后来我陷入了这样的错误 precision layer cpp 34 检查失败 outer num inner num bottom 1
  • (Django) (外键问题) model.person_id 不能为 NULL

    我知道这在 Django 圈子里似乎是一个被过度询问的问题 但我不敢说我 还没有找到解决方案 我的模型 from djago import User class InfoPersonal models Model person models
  • “NoneType”对象不可订阅?

    list1 name1 info1 10 list2 name2 info2 30 list3 name3 info3 50 MASTERLIST list1 list2 list3 def printer lst print Availa
  • 箱线图与箱线图有何不同?

    我想知道当我们在海生图书馆中有箱线图时为什么会有箱线图 我知道一件事是箱线图优化了表示数据的方式 特别是对于大型数据集 但我不知道为什么 除此之外 我没有任何充分的理由使用箱线图 箱线图将中位数显示为中心线 第 50 个百分位数 然后将第
  • MySQL 的 read_sql() 非常慢

    我将 MySQL 与 pandas 和 sqlalchemy 一起使用 然而 它的速度非常慢 对于一个包含 1100 万行的表 一个简单的查询需要 11 分钟以上才能完成 哪些行动可以改善这种表现 提到的表没有主键 并且仅由一列索引 fro
  • 将新形状传递给“np.reshape”

    Within numpy ndarray reshape https docs scipy org doc numpy reference generated numpy ndarray reshape html the shape参数是一
  • Python:如何删除圆括号内的文本?

    我试过了 但没用 return re sub myResultStats text 建议 thanks 尝试这个 return re sub myResultStats text 括号表示捕获组 因此您必须转义它们
  • Python - 使用 win32com.client 将 Excel 单元格范围格式化为表格

    我正在尝试编写一个函数 该函数选择工作表中的所有非空单元格 根据内容调整列宽 并将其格式化为表格 我被困在最后一点 这是我当前的代码 import win32com client from win32com client import co
  • 从文件中读取单词并放入列表中

    本质上 我有一个巨大的文件 所有文件包含每行多个单词 每个单词用空格分隔 有点像这样 WORD WORD WORD WORD ANOTHER WORD SCRABBLE BLAH YES NO 我想要做的是将文件中的所有单词放入一个巨大的列
  • “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错

    我有大约 50000 个图像和注释文件用于训练 YOLOv5 对象检测模型 我在另一台计算机上仅使用 CPU 训练模型没有问题 但需要太长时间 因此我需要 GPU 训练 我的问题是 当我尝试使用 GPU 进行训练时 我不断收到此错误 OSE
  • Emacs:调试Python的方法

    我把这个贴在程序员 stackexchange com https softwareengineering stackexchange com questions 29844 emacs methods for debugging pyth
  • pip:证书失败,但curl 有效

    我们在客户端安装了根证书 https 连接适用于curl 但如果我们尝试使用pip 它失败 Could not fetch URL https installserver 40443 pypi simple pep8 There was a
  • 对 Python 的 id() 感到困惑[重复]

    这个问题在这里已经有答案了 我可以理解以下定义 每个对象都有一个身份 类型和值 对象的身份 一旦创建就永远不会改变 你可能会认为它是 对象在内存中的地址 这is操作员比较身份 两个物体 这id 函数返回一个代表其值的整数 身份 我假设上面的
  • NumPy 数组不可 JSON 序列化

    创建 NumPy 数组并将其保存为 Django 上下文变量后 加载网页时收到以下错误 array 0 239 479 717 952 1192 1432 1667 dtype int64 is not JSON serializable
  • Tensorflow:提要字典错误:您必须为占位符张量提供值

    我有一个错误 我无法找出原因 这是代码 with tf Graph as default global step tf Variable 0 trainable False images tf placeholder tf float32
  • 如何克服 numpy.unique 的 MemoryError

    我正在使用 Numpy 版本 1 11 1 并且必须处理一个二维数组 my arr shape 25000 25000 所有值都是整数 我需要一个唯一的数组值列表 使用时lst np unique my arr 我正进入 状态 Traceb
  • 使用 boto3 将 csv 文件保存到 s3

    我正在尝试写入 CSV 文件并将其保存到 s3 中的特定文件夹 存在 这是我的代码 from io import BytesIO import pandas as pd import boto3 s3 boto3 resource s3 d
  • 继承自 NumPy 数组的类如何更改其自身的值?

    我有一个继承自 NumPy n 维数组的简单类 我想要该类的两个方法可以更改该类实例的数组值 其中一种方法应将类实例的数组设置为类实例的列表数据属性的值 另一种方法应将一些列表值附加到类实例的数组中 我不确定如何实现这一点 但我的尝试如下

随机推荐

  • 带有多个 webapp 的 tomcat ajp 连接器

    我有一个 tomcat 服务器 带有 webapps ROOT 应用程序 以 Apache 为前端 LoadModule proxy ajp module modules mod proxy ajp so and ProxyPass ajp
  • 如何在 Swift 中返回序列?

    我正在尝试编写一个扩展Matrix书中的例子 稍微调整为通用的 https stackoverflow com q 24136604 458193 我正在尝试编写一个名为的方法getRow返回给定行的值序列 在 C 中 我会这样写 IEnu
  • 迭代 JSON 数据? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个如下所示的 JSON 数据
  • 数据源中 String 类型的给定值无法转换为指定目标列的 bigint 类型

    这是我的代码 protected void SendToServer Click object sender EventArgs e DataTable Values Session valuesdt as DataTable if Val
  • 必须在创建 QCoreApplication 之前设置属性 Qt::AA_UseSoftwareOpenGL

    所以我的环境是 Windows 10 截至 2019 年 11 月 8 日更新 通过 miniconda 安装了 Python 3 6 Spyder 4 运行 miniconda shell 激活虚拟环境 运行 Spyder 我得到以下信息
  • .PO 到 .MO - 程序转换 (PHP)

    我计划允许用户通过 PHP 用户界面生成 POT 文件 PO 文件 作为 CMS 解决方案的一部分 一旦生成这些文件 简单一点 我希望允许我的系统自动将这些文件转换为 MO 文件以响应用户 POST 请求 我在SO上看到了以下问题 php
  • InvalidArgumentError:ConcatOp:输入的维度应该匹配

    Tensorflow 1 7使用dynamic rnn时 一开始运行良好 但在第32步 当我运行代码时它发生变化 时 出现错误 当我使用较小的批次时 代码似乎可以运行更长时间 但是错误仍然弹出 只是无法弄清楚出了什么问题 from mapp
  • 一个带有一个等号的 php if 语句...?这是什么意思?

    我正在尝试解决问题 并且需要理解这个 if 语句的含义 if confirmation payment modules gt confirmation 我能找到的所有资源只显示带有双等号的 if 语句 而不是单等号 这是 php if 的简
  • 错误:没有运算符 << 与这些操作数匹配?

    我正在练习一些 C 试图离开 Java 我偶然发现了这个恼人的错误 错误 没有操作符 这个错误在我的 cpp 文件中 还有其他错误 但我现在不关心它们 void NamedStorm displayOutput NamedStorm sto
  • 是否可以在 Android Wear 上显示 Google 地图视图?

    是否可以在 Android Wear 上显示 Google 地图视图 我想在地图上向用户显示特定位置 您可以设法在您的 Activity 中嵌入 MapView 但是这是行不通的因为 Android Wear 无法直接访问网络 然而 你能做
  • 使用 ImageIO 发送图像流?

    我设置了一个 ServerSocket 和一个 Socket 因此 ServerSocket 使用 ImageIO write 发送图像流 并且 Socket 尝试读取它们并用它们更新 JFrame 所以我想知道 ImageIO 是否可以检
  • 使用 Bash 下载并在 wordpress wp-config.php 中插入盐字符串

    如何插入变量 SALT 的内容在特定点 线或串 使用 Bash 脚本从 WordPress 获取像 wp contet php 这样的文件 SALT curl L https api wordpress org secret key 1 1
  • 应用 CSS 过滤器时,内联 SVG 在 iOS 和 Safari 中消失

    情况是我有一个内联 SVG 生成的格伦蒂康 https github com filamentgroup grunticon并插入到 DOM 中 它是灰色背景上的白色 带有阴影 我对阴影使用了以下 CSS svg webkit filter
  • 在 Python 中注释函数的正确方法是什么?

    Python 中是否有一种普遍接受的注释函数的方法 以下情况可以接受吗 Create a new user def add self 正确的方法是提供文档字符串 那样 help add 也会吐出你的评论 def add self Creat
  • 绑定用户实体和 GlassFish 主体

    我有一个实体类User其中包含用户名 名字 姓氏和密码等信息 我有 GlassFish 3 1 服务器设置来执行身份验证 到目前为止 一切都很好 在容器对用户进行身份验证后 我需要某种方法将主体绑定到实际的用户实体 毕竟 GlassFish
  • 无法使用 RS256 验证 JWT - 算法无效

    我正在尝试将 JWT Auth 从秘密短语移至 RS256 这是示例代码 import fs from fs import jwt from jsonwebtoken const private key fs readFileSync pr
  • 在 Elastic beanstalk 上配置 apache

    我正在 elastic beanstalk 上使用 django 进行开发 我想对 apache 配置进行两处更改 1 将 www domain com 重定向到 domain com 2 重定向http domain com http d
  • 捕获/监听函数的执行

    我想添加到模块记录器中的所有功能 我想记录函数的 开始 时间和 结束 时间 这样我就可以获得每个函数 同步函数 的执行时间 但我不知道如何让它发挥作用 我不想以某种动态方式重写函数 我想在将来调试它们 所以需要保留原始代码 我需要找到某种方
  • 同时运行多个 Python 脚本,然后依次运行

    我可以像这样从 bash 脚本同时运行多个 Python 脚本 bin bash python pr1 py python pr2 py python aop py python loader py 但是 如果我希望一批同时触发 并在运行后
  • 如何调试 GIMP 插件?输出在哪里?

    我正在用 Python 为 Windows 上的 GIMP 制作一个插件 这一页 http gimpbook com scripting notes html建议从 shell 运行它或查看 xsession errors 都不起作用 我可