Методы отладки сценариев Ubuntu Nautilus, написанных на Python
При написании сценария Nautilus (например, с использованием Python) я в настоящее время знаю о двух методах базовой отладки:
- Использование (например, Zenity) всплывающих окон в качестве операторов "печати".
- Захват stderr и stdout в текстовых файлах для дальнейшего использования.
Эти методы работают достаточно хорошо, но я подозреваю, что есть более эффективные методы, о которых я не знаю. Кто-нибудь может предложить другие методы?
Редактировать:
Контекст: я искал методы для отладки скрипта Python, запускаемого из контекстного меню Ubuntu в Nautilus.
Использование ответа Седрика о перезапуске nautilus с параметром --no-desktop означает, что stderr и stdout становятся видимыми в окне терминала. Однако этот терминал, по-видимому, не может использоваться в качестве консоли pdb для отладки (кажется, что он предназначен только для вывода).
В моем поиске способа получить входной и выходной доступ к процессу сценария при запуске из меню, вызываемого правой кнопкой мыши, я нашел информацию, указанную в моем ответе ниже.
(Кроме того, хотя я согласен с тем, что модульное тестирование и ведение журнала являются наилучшей практикой, я бы сказал, что есть место для интерактивной отладки, особенно с небольшими сценариями.)
5 ответов
То, что вы просили, - это просто просмотреть выходные данные вашего скрипта, что можно сделать, перезапустив nautilus с параметром --no-desktop:
$ nautilus -q
$ nautilus --no-desktop
Таким образом, вы увидите все выходные данные (stderr / stdout), сделанные вашим скриптом или интерпретатором python. Должно быть полезным...
Отладчик (pdb или Winpdb)
Используйте модуль регистрации Python
Используйте декоратор отладки - см. http://paulbutler.org/archives/python-debugging-with-decorators/
Другие полезные советы: как написать @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.
Это будет более эффективным, чем "печатные" заявления, и будет повторяться, чтобы помочь вам предотвратить регрессию. Это также уменьшит риск временного отладочного кода, оставленного в вашем скрипте.