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


108

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

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

답변:


104

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

python -i program.py

이것은 program.py의 코드를 실행 한 다음 REPL로 이동합니다. program.py의 최상위 수준에서 정의하거나 가져온 모든 것을 사용할 수 있습니다.


21
어두운면으로 전환 할 준비가되면 ipython -i program.py가 있습니다.
joeforker

인상적이고 간단합니다.
Nishant 2014 년

126

나는 이것을 자주 사용합니다 :

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

47
그것보다 훨씬 더 간단하게 할 수 있습니다 : import code; code.interact (local = locals ())
Steven Kryskalla

3
pdb에서 interact.
gerrit

43

이를 수행하는 방법은 다음과 같습니다 (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 인스턴스를 열면 데이터와 함수에 대한 전체 액세스 권한이 주어집니다. 대화식 부분을 완료하면 프로그램 실행을 재개 할 수 있습니다 (필요한만큼 나중에 다시 중지 할 수도 있음).


3
IPython은 훌륭하지만 OP가 내장 Python 만 사용하는 솔루션을 원한다면 Jason의 code.InteractiveConsole () 솔루션이 "해야하는"방법입니다. :-)
Ben Hoyt

18

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

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

import ipdb
ipdb.set_trace()

17

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

import pdb;pdb.set_trace() 

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


3
나는 그가 실행중인 프로세스, 즉 Lisp를 실시간으로 변경하고 싶어한다고 생각합니다.
Pinochle

1
pdb로 시작한 스크립트 실행을 재개하는 방법이 있습니까?
Jeff Welling

1
나는 파이썬의 VIM에서 코드 스 니펫을 작성하는 경향이있다. 예를 들어, 그것을 저장하고! python -i %를 수행한다. 또는 pdb. 좋은 사용 사례입니다.
Nishant

0

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.