스크립트가 명령 줄에서 시작된 경우에도 실행 중 임의의 지점에서 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
중단 점을 원하는 곳에 배치하면 파이썬 인터프리터와 동일한 구문을 사용하여 상태를 확인할 수 있습니다 (모듈 가져 오기를 허용하지 않는 것 같음). 매우 우아하지는 않지만 다른 설정이 필요하지 않습니다.