Вставить (создать) интерактивную оболочку Python внутри программы Python

Можно ли запустить интерактивную оболочку Python внутри программы Python?

Я хочу использовать такую ​​интерактивную оболочку Python (которая выполняется внутри исполнения моей программы) для проверки некоторых внутренних переменных программы.

5 ответов

Модуль кода предоставляет интерактивную консоль:

import readline # optional, will allow Up/Down/History in the console
import code
variables = globals().copy()
variables.update(locals())
shell = code.InteractiveConsole(variables)
shell.interact()

В ipython 0.13+ вам нужно сделать это:

from IPython import embed

embed()

У меня был этот код в течение долгого времени, я надеюсь, что вы можете использовать его.

Для проверки / использования переменных просто поместите их в текущее пространство имен. В качестве примера я могу получить доступ var1 а также var2 из командной строки.

var1 = 5
var2 = "Mike"
# Credit to effbot.org/librarybook/code.htm for loading variables into current namespace
def keyboard(banner=None):
    import code, sys

    # 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)

    code.interact(banner=banner, local=namespace)


if __name__ == '__main__':
  keyboard()

Однако, если вы хотите строго отладить ваше приложение, я настоятельно рекомендую использовать IDE или pdb(отладчик python).

Используя IPython, вам просто нужно позвонить:

from IPython.Shell import IPShellEmbed; IPShellEmbed()()

Другой трюк (помимо уже предложенных) - это открытие интерактивной оболочки и импорт вашего (возможно, модифицированного) скрипта Python. После импорта доступно большинство переменных, функций, классов и т. Д. (В зависимости от того, как все подготовлено), и вы даже можете создавать объекты в интерактивном режиме из командной строки. Итак, если у вас есть test.py файл, вы можете открыть Idle или другую оболочку, и введите import test (если он находится в текущем рабочем каталоге).

Другие вопросы по тегам