Можно ли запустить интерактивную оболочку Python внутри программы Python?
Я хочу использовать такую интерактивную оболочку Python (которая выполняется внутри выполнения моей программы) для проверки некоторых внутренних переменных программы.
Можно ли запустить интерактивную оболочку Python внутри программы Python?
Я хочу использовать такую интерактивную оболочку Python (которая выполняется внутри выполнения моей программы) для проверки некоторых внутренних переменных программы.
Модуль code предоставляет интерактивную консоль:
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 script. При импорте доступны большинство переменных, функций, классов и т.д. (В зависимости от того, как все это подготовлено), и вы даже можете создавать объекты в интерактивном режиме из командной строки. Итак, если у вас есть файл test.py
, вы можете открыть Idle или другую оболочку и набрать import test
(если он находится в текущем рабочем каталоге).