Методы отладки сценариев Ubuntu Nautilus, написанных на Python - PullRequest
5 голосов
/ 17 декабря 2010

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

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

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

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

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 03 января 2011

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

$ nautilus -q
$ nautilus --no-desktop

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

3 голосов
/ 18 декабря 2010
  1. Отладчик (pdb или Winpdb)

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

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

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

1 голос
/ 22 августа 2017

В качестве хитрости, чтобы увидеть вывод и также взаимодействовать со сценарием в терминале, я разделил свой сценарий на два файла (см. Вопрос Как выполнить сценарий 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 script меню:

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

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

1 голос
/ 09 января 2011

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

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

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

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

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

1 голос
/ 17 декабря 2010

Проведите юнит-тестирование ваших скриптов с помощью PyUnit.

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

...