[python] Python 코드에서 REPL (Read, Eval, Print, Loop)에 드롭하는 방법

스크립트가 명령 줄에서 시작된 경우에도 실행 중 임의의 지점에서 Python 스크립트를 REPL에 프로그래밍 방식으로 강제로 드롭하는 방법이 있습니까?

빠르고 더러운 플로팅 프로그램을 작성 중입니다. stdin 또는 파일에서 데이터를 읽고 플로팅 한 다음 REPL에 드롭하여 플롯을 사용자 지정할 수 있도록합니다.



답변

파이썬에 대화 형 옵션을 사용해 볼 수 있습니다.

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

Python REPL의 캐딜락 인 IPython을 사용해야합니다. http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython 참조

문서에서 :

또한 자동으로 계산 집약적 인 부분을 수행 한 다음 데이터, 플롯 등을보기 위해 중지해야하는 일반적인 과학 컴퓨팅 상황에서도 유용 할 수 있습니다. IPython 인스턴스를 열면 데이터와 함수에 대한 전체 액세스 권한이 주어집니다. 대화식 부분을 완료하면 프로그램 실행을 재개 할 수 있습니다 (필요한만큼 나중에 다시 중지 할 수도 있음).


답변

iPython 및 디버거 기능을 사용하려면 ipdb 를 사용해야합니다 .

다음을 추가하여 pdb와 동일한 방식으로 사용할 수 있습니다.

import ipdb
ipdb.set_trace()


답변

디버거를 시작할 수 있습니다.

import pdb;pdb.set_trace() 

REPL을 원하는 것이 확실하지 않지만 디버거는 매우 유사합니다.


답변

내 스크립트 중 하나에서이 작업을 수행했습니다 (대용량 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

중단 점을 원하는 곳에 배치하면 파이썬 인터프리터와 동일한 구문을 사용하여 상태를 확인할 수 있습니다 (모듈 가져 오기를 허용하지 않는 것 같음). 매우 우아하지는 않지만 다른 설정이 필요하지 않습니다.


답변