6

在编写Nautilus 脚本(例如使用 Python)时,我目前知道两种基本调试方法:

  1. 使用(例如 Zenity)弹出窗口作为“打印”语句。
  2. 在文本文件中捕获 stderr 和 stdout 以供以后参考。

这些方法工作得相当好,但我怀疑还有更有效的方法我不知道。任何人都可以建议其他方法吗?

编辑:

背景:我寻找方法来调试从 Nautilus 中的 Ubuntu 右键菜单启动的 python 脚本。

使用 cedric 的使用 --no-desktop 选项重新启动 nautilus 的答案意味着 stderr 和 stdout 在终端窗口中变得可见。但是,此终端似乎不能用作 pdb 控制台进行调试(它似乎仅用于输出)。

在我寻找从右键菜单启动时获取对脚本进程的输入和输出访问权的方法时,我发现了下面我的答案中列出的信息。

(此外,虽然我同意单元测试和日志记录是最佳实践,但我认为仍然存在交互式调试的空间,尤其是对于小型脚本。)

4

5 回答 5

6

您要求的只是查看您的脚本输出,这可以通过使用 --no-desktop 选项重新启动 nautilus 来完成:

$ nautilus -q
$ nautilus --no-desktop

这样,您将看到脚本或 python 解释器生成的任何输出(stderr / stdout)。应该有用...

于 2011-01-03T12:52:22.397 回答
3
  1. 调试器(pdb 或 Winpdb)

  2. 使用 python 的日志记录模块

  3. 使用调试装饰器 - 请参阅http://paulbutler.org/archives/python-debugging-with-decorators/

  4. 更多有用的提示,您将如何在 python 中编写 @debuggable 装饰器?

于 2010-12-17T23:03:52.167 回答
3

作为查看输出并与终端中的脚本交互的技巧,我将脚本拆分为两个文件(请参阅问题如何在保持打开状态的 gnome-terminal 窗口中执行用 Python 编写的 nautilus 脚本?):

  • ~/.local/share/nautilus/scripts/firstfile.sh它打开一个终端,执行其中的脚本,并保持打开状态:

    #!/bin/bash
    gnome-terminal -- bash -c "python3 ~/.local/share/nautilus/scripts/.secondfile.py; bash"
    
  • ~/.local/share/nautilus/scripts/.secondfile.py它包含实际的 Python 脚本,并且从nautilus 脚本菜单中隐藏:

    #!/usr/bin/python3
    print("Hello")
    

当然,这只是用于基本调试,但它可能对某人有用。

于 2017-08-22T11:08:16.103 回答
2

在为从 Nautilus 右键菜单的脚本子菜单启动的 python 脚本寻找交互式调试的方法后,我找到了以下解决方案。

可以使用 WingIDE 来监听和连接外部进程。这使得可以将 WingIDE 调试功能用于外部启动的代码,例如我的 Python Nautilus 脚本。

我只需要打开 WingIDE 首选项“启用被动侦听”,然后将wingdbstub.py 复制到脚本目录。然后我在脚本中添加了“importwingdbstub”,并在脚本代码中设置了一个断点,在 Wing 中打开。

当我从 Nautilus 右键菜单运行脚本时,该进程已连接到 WingIDE,并且我能够使用所有 WingIDE 调试功能。

此处的详细信息:5.12 调试外部启动的进程

于 2011-01-09T03:54:49.697 回答
1

使用 PyUnit 对脚本进行单元测试。

这将比“打印”语句更有效,并且可以重复以帮助您防止回归。它还将降低临时调试代码留在脚本中的风险。

于 2010-12-17T20:31:33.250 回答