Как запустить консоль python в программе (для упрощения отладки)? - PullRequest
5 голосов
/ 22 декабря 2010

После многих лет исследований программирования в Matlab я упускаю способ приостановить выполнение программы в середине выполнения и проверить переменные, выполнить построение графика, сохранить / изменить данные и т. Д. С помощью интерактивной консоли, а затем возобновить выполнение.

Есть ли способ сделать то же самое в Python?

Например:


   # ... python code ...
   RunInterpreter
   # Interactive console is displayed, so user can inspect local/global variables
   # User types CTRL-D to exit, and script then continues to run
   # ... more python code ...

Это значительно упростит отладку. Предложения высоко ценится, спасибо!

Ответы [ 5 ]

6 голосов
/ 22 декабря 2010

Используйте библиотеку pdb.

У меня эта строка связана с <F8> в Vim:

import pdb; pdb.set_trace()

Это приведет вас к консоли pdb.

Консоль pdb не является вполне такой же, как стандартная консоль Python ... Но она будет выполнять большинство тех же функций. Кроме того, в моем ~/.pdbrc я получил:

alias i from IPython.Shell import IPShellEmbed as IPSh; IPSh(argv='')()

Чтобы я мог войти в «настоящую» оболочку iPython из pdb с помощью команды i:

(pdb) i
...
In [1]:
4 голосов
/ 25 мая 2011

Отличным решением, которое я нашел, было использование модуля 'code'. Теперь я могу вызвать DebugKeyboard () из любого места в моем коде, и появится подсказка интерпретатора, позволяющая мне исследовать переменные и запускать код. CTRL-D продолжит программу.

import code
import sys    

def DebugKeyboard(banner="Debugger started (CTRL-D to quit)"):

    # use exception trick to pick up the current frame
    try:
        raise None
    except:
        frame = sys.exc_info()[2].tb_frame.f_back

    # evaluate commands in current namespace
    namespace = frame.f_globals.copy()
    namespace.update(frame.f_locals)

    print "START DEBUG"
    code.interact(banner=banner, local=namespace)
    print "END DEBUG"
3 голосов
/ 22 декабря 2010

Модуль code содержит классы для вызова REPL.

2 голосов
/ 22 декабря 2010

Проверьте Python отладчик .Короче говоря, вы можете вставить

import pdb; pdb.set_trace()

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

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

pdb - это то, что вы ищете - просто позвоните на pdb.set_trace(), куда бы вы ни захотели попасть в отладчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...