Методы отладки сценариев Ubuntu Nautilus, написанных на Python

При написании сценария Nautilus (например, с использованием Python) я в настоящее время знаю о двух методах базовой отладки:

  1. Использование (например, Zenity) всплывающих окон в качестве операторов "печати".
  2. Захват stderr и stdout в текстовых файлах для дальнейшего использования.

Эти методы работают достаточно хорошо, но я подозреваю, что есть более эффективные методы, о которых я не знаю. Кто-нибудь может предложить другие методы?

Редактировать:

Контекст: я искал методы для отладки скрипта Python, запускаемого из контекстного меню Ubuntu в Nautilus.

Использование ответа Седрика о перезапуске nautilus с параметром --no-desktop означает, что stderr и stdout становятся видимыми в окне терминала. Однако этот терминал, по-видимому, не может использоваться в качестве консоли pdb для отладки (кажется, что он предназначен только для вывода).

В моем поиске способа получить входной и выходной доступ к процессу сценария при запуске из меню, вызываемого правой кнопкой мыши, я нашел информацию, указанную в моем ответе ниже.

(Кроме того, хотя я согласен с тем, что модульное тестирование и ведение журнала являются наилучшей практикой, я бы сказал, что есть место для интерактивной отладки, особенно с небольшими сценариями.)

5 ответов

То, что вы просили, - это просто просмотреть выходные данные вашего скрипта, что можно сделать, перезапустив nautilus с параметром --no-desktop:

$ nautilus -q
$ nautilus --no-desktop

Таким образом, вы увидите все выходные данные (stderr / stdout), сделанные вашим скриптом или интерпретатором python. Должно быть полезным...

  1. Отладчик (pdb или Winpdb)

  2. Используйте модуль регистрации Python

  3. Используйте декоратор отладки - см. http://paulbutler.org/archives/python-debugging-with-decorators/

  4. Другие полезные советы: как написать @debuggable декоратор на python?

В качестве трюка, чтобы увидеть вывод и также взаимодействовать со сценарием в терминале, я разделил свой сценарий на два файла (см. Вопрос " Как выполнить сценарий nautilus, написанный на Python, в окне терминала gnome, которое остается открытым?):

  • ~/.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")
    

Конечно, это только для базовой отладки, но это может быть полезно для кого-то.

После поиска способа получения интерактивной отладки для скрипта Python, запускаемого из подменю scripts в контекстном меню Nautilus, я нашел следующее решение.

Можно использовать WingIDE для прослушивания и подключения к внешним процессам. Это позволяет использовать возможности отладки WingIDE для запускаемого извне кода, такого как мой скрипт Python Nautilus.

Мне просто нужно было включить параметр WingIDE "Включить пассивное прослушивание", а затем скопировать wingdbstub.py в каталог скриптов. Затем я добавил в скрипт "import wingdbstub" и установил точку останова в коде скрипта, открытом в Wing.

Когда я запустил скрипт из контекстного меню Nautilus, процесс был подключен к WingIDE, и я смог использовать все возможности отладки WingIDE.

Подробности здесь: 5.12 Отладка процессов, инициируемых извне.

Модульное тестирование ваших скриптов с использованием PyUnit.

Это будет более эффективным, чем "печатные" заявления, и будет повторяться, чтобы помочь вам предотвратить регрессию. Это также уменьшит риск временного отладочного кода, оставленного в вашем скрипте.

Другие вопросы по тегам