Как перейти к REPL (Read, Eval, Print, Loop) из кода Python

Есть ли способ программно заставить скрипт Python переходить в REPL в произвольной точке его выполнения, даже если скрипт был запущен из командной строки?

Я пишу программу быстрой и грязной графики, которую я хочу читать данные из stdin или файла, зарисовывать ее, а затем переходить в REPL, чтобы можно было настроить сюжет.

6 Solutions collect form web for “Как перейти к REPL (Read, Eval, Print, Loop) из кода Python”

Вы можете попробовать использовать интерактивную опцию для python:

python -i program.py 

Это выполнит код в program.py, затем перейдите к REPL. Все, что вы определите или импортируете на верхнем уровне program.py, будет доступно.

Я часто использую это:

 def interact(): import code code.InteractiveConsole(locals=globals()).interact() 

Вот как вы должны это делать (IPython> v0.11):

 import IPython IPython.embed() 

Для IPython <= v0.11:

 from IPython.Shell import IPShellEmbed ipshell = IPShellEmbed() ipshell() # this call anywhere in your program will start IPython 

Вы должны использовать IPython, Cadillac из PPL REPL. См. http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

Из документации:

Он также может быть полезен в научных вычислительных ситуациях, когда обычно необходимо выполнить некоторую автоматическую, вычислительно-интенсивную часть, а затем прекратить просмотр данных, графиков и т. Д. Открытие экземпляра IPython даст вам полный доступ к вашим данным и функциям, и вы можете возобновить выполнение программы, как только вы закончите с интерактивной частью (возможно, чтобы остановить ее позже, столько раз, сколько необходимо).

Вы можете запустить отладчик:

 import pdb;pdb.set_trace() 

Не уверен, для чего нужен REPL, но отладчик очень похож.

Чтобы использовать iPython и функциональность отладчика, вы должны использовать ipdb ,

Вы можете использовать его так же, как pdb, с добавлением:

 import ipdb ipdb.set_trace() 

Я просто сделал это в одном из своих собственных сценариев (он работает внутри рамки автоматизации, которая представляет собой огромный инструмент PITA):

 x = 0 # exit loop counter while x == 0: user_input = raw_input("Please enter a command, or press q to quit: ") if user_input[0] == "q": x = 1 else: try: print eval(user_input) except: print "I can't do that, Dave." continue 

Просто поместите это там, где хотите точку останова, и вы можете проверить состояние, используя тот же синтаксис, что и интерпретатор python (хотя, похоже, он не позволяет вам импортировать модуль). Это не очень элегантно, но не требует никакой другой настройки.

  • Как я могу проверить, запущен ли скрипт Python в интерактивном режиме?
  • Ввод интерактивного режима в Python
  • Python - лучший язык программирования в мире.