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

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

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

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

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

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

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

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

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


person whichone    schedule 17.12.2010    source источник
comment
Если вы не можете использовать pdb, стандартный отладчик Python, вы можете использовать IPython.   -  person martineau    schedule 17.12.2010


Ответы (5)


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

$ nautilus -q
$ nautilus --no-desktop

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

person cedric    schedule 03.01.2011
comment
спасибо за nautilus --no-desktop, очень полезно!! - person khirod; 08.06.2014

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

  2. Используйте модуль ведения журнала Python

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

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

person Hugh Bothwell    schedule 17.12.2010

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

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

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

person remjg    schedule 22.08.2017

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

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

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

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

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

person whichone    schedule 09.01.2011

Выполните модульное тестирование своих скриптов с помощью PyUnit.

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

person Johnsyweb    schedule 17.12.2010