ExConsole — экстренная консоль для Python

    Пост обещает быть сверхкратким.

    ExConsole позволяет встроить интерактивную консоль-отладчик в Python-приложение. Консоль вызывается при фатальном исключении либо по приему SIGQUIT (он же Ctrl-\).

    Пример использования:

    import exconsole
    exconsole.register()
    
    do_dangerous_stuff()
    


    Пример работы с консолью:

    Activating emergency console
    ----------------------------
    Caused by:
    ZeroDivisionError
    integer division or modulo by zero
    
    Stack frames:
      [  0] example.py:17
    
      [  1] example.py:15
                  Tester().test()
      [  2] example.py:9
                      self.inner()
      [  3] example.py:6
                      self.divide(2, 0)
    > [  4] example.py:3
                      return a / b
    On frame 4
    Source:
               def divide(self, a, b):
        >>         return a / b
    
    Press Ctrl-D to leave console
    Type "_help()"" for built-in commands
    
    >>> print a,b
    2 0
    >>> _f(3)
    On frame 3
    Source:
               def inner(self):
        >>         self.divide(2, 0)
    
    >>> print self
    <__main__.Tester instance at 0x7f67c9a0e440>
    



    Консоль поддерживает перемещение по фреймам стека и работу с местными переменными, а также позволяет выйти и продолжить выполнение приложения.

    Встроенные команды:
    • _s() — вывод стека
    • _f(index) — перемещение в другой фрейм
    • _exc — объект пойманного исключения (если оно было)


    Поддерживается Python 2.6+ и 3.
    Пакеты для Debian и CentOS доступны в репозитории Ajenti
    Ссылки: Github PyPI
    • +18
    • 4,5k
    • 9
    Поделиться публикацией

    Похожие публикации

    Комментарии 9

      0
      Искал одно время что-то подобное. Спасибо.
      Вопрос как будет себя вести в сочетании с asyncore?
        0
        Проблем быть не должно, с gevent, например, все нормально.
        0
        ExConsole позволяет встроить интерактивную консоль-отладчик в Python-приложение.

        А как же кроссплатформенность инструмента? Я правильно понимаю, что в Windows не заработает? Модуль signal под Windows ограниченный. В нём, например, нет SIGQUIT.
          0
          В Windows, к сожалению, ввиду отсутствия сигналов, придется довольствоваться отловом необработанных исключений.
          0
          Интересная штука. Пара вопросов:

          — чем exconsole от pdb.post_mortem отличается, и почему pdb.post_mortem внутри не используется?
          — почему репозиторий нестандартно организован — вместо setup.py — setup.py.in? Из-за этого же нельзя dev-версию через pip прямо из репозитория поставить, + нужно какие-то make-файлы запускать, чтоб готовый к установке пакет получить.
            0
            — pdb.pm() запускается только при наличии exception'a, с exconsole программу можно прервать в любом месте
            — добавил возможность перехода в PDB
            — в PyPI лежит обычный setup.py (он генерируется из шаблона при сборке)
              +1
              ipdb лучше!
                0
                Лишние зависимости не нужны.
                  +1
                  Ограничивать dev зависимости лозунгом «Лишние зависимости не нужны.» это конечно же скил неимоверный.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое