调试用Python编写的Ubuntu Nautilus脚本的方法

时间:2010-12-17 20:26:14

标签: python debugging scripting nautilus

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

  1. 使用(例如Zenity)弹出窗口作为“打印”语句。
  2. 在文本文件中捕获stderr和stdout以供日后参考。
  3. 这些方法运作得相当好,但我怀疑有更多有效的方法我不知道。任何人都可以建议其他方法吗?

    编辑:

    上下文:我找到了调试从Nautilus中的Ubuntu右键菜单启动的python脚本的方法。

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

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

    (另外,虽然我同意单元测试和日志记录是最佳实践,但我认为仍然存在交互式调试的地方,特别是对于小脚本。)

5 个答案:

答案 0 :(得分:5)

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

$ nautilus -q
$ nautilus --no-desktop

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

答案 1 :(得分:3)

  1. 调试器(pdb或Winpdb)

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

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

  4. How would you write a @debuggable decorator in python?

  5. 提供了更多有用的提示

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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

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

此处的详细信息:5.12 Debugging Externally Initiated Processes

答案 4 :(得分:1)

作为查看输出并与终端中的脚本交互的技巧,我将脚本分成两个文件(请参阅问题How to execute a nautilus script written in Python inside a gnome-terminal window that stays open?):

  • ~/.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.sh包含实际的Python脚本,并且在 nautilus脚本菜单中隐藏:

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

当然这仅适用于基本调试,但对某人可能有用。