Как вы можете программно сказать интерпретатору CPython, чтобы он вошел в интерактивный режим? - PullRequest
8 голосов
/ 26 февраля 2009

Если вы вызовете интерпретатор cpython с параметром -i, он перейдет в интерактивный режим после завершения любых команд или сценариев, которые ему даны для запуска. Есть ли способ, в рамках программы, заставить переводчика сделать это, даже если ему не было дано -i? Очевидный вариант использования заключается в отладке путем интерактивной проверки состояния при возникновении исключительного условия.

Ответы [ 4 ]

14 голосов
/ 26 февраля 2009

Вы хотите кодовый модуль .

#!/usr/bin/env python

import code    
code.interact("Enter Here")
5 голосов
/ 26 февраля 2009

Установите переменную окружения PYTHONINSPECT. Это также можно сделать в самом скрипте:

import os
os.environ["PYTHONINSPECT"] = "1"

Для отладки неожиданных исключений вы также можете использовать этот приятный рецепт http://code.activestate.com/recipes/65287/

3 голосов
/ 27 февраля 2009

Рецепт , указанный в другом ответе с использованием sys.excepthook, звучит так, как вы хотите. В противном случае вы можете запустить code.interact при выходе из программы:

import code
import sys
sys.exitfunc = code.interact
1 голос
/ 01 августа 2013

Лучший способ сделать это, о котором я знаю, это:

from IPython import embed
embed()

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

...