내 디버깅에 대해서는 pdb
이 좋습니다. 그러나 에 들어갈 수 있다면 많고 쿨러 (유용합니다)가 될 것입니다. 이게 가능합니까?코드에서 ipython을 사용할 수 있습니까?
답변
은 표준 PDB에 iPython를 짜 ipdb
프로젝트가있다, 그래서 당신은 다만 수 : 일반적인 pip install ipdb
를 통해
import ipdb; ipdb.set_trace()
그것은 설치합니다.
ipdb
은 매우 짧은, 그래서 대신에 당신은 또한 파이썬 경로 어딘가에 파일 ipdb.py
을 만들고 파일에 다음을 붙여 넣을 수 있습니다 easy_installing입니다 :
import sys
from IPython.Debugger import Pdb
from IPython.Shell import IPShell
from IPython import ipapi
shell = IPShell(argv=[''])
def set_trace():
ip = ipapi.get()
def_colors = ip.options.colors
Pdb(def_colors).set_trace(sys._getframe().f_back)
일반적으로 ipython을 사용할 때 "pdb"명령을 사용하여 자동 디버깅을 시작합니다.
그런 다음 내 스크립트가있는 디렉토리에서 "run myscript.py"명령을 사용하여 내 스크립트를 실행하십시오.
예외가 발생하면 ipython은 디버거 내부에서 프로그램을 중지합니다. IPython docs에서 명령 ipython 마법 (% 마법)
그렇게 ipython.set_trace 뭔가를 작성하는 방법은 없습니다에()? :) – Geo
에 대한 도움말 명령을 체크 아웃 :
import IPython.ipapi
namespace = dict(
kissa = 15,
koira = 16)
IPython.ipapi.launch_new_instance(namespace)
프로그래밍 방식 IPython 쉘을 시작합니다. 분명히 namespace
dict의 값은 단지 더미 값일뿐입니다. 실제로는 locals()
을 사용하는 것이 더 합리적 일 수 있습니다.
참고 :이 코드는 하드 코딩해야합니다. pdb
과 같은 방식으로 작동하지 않습니다. 그것이 당신이 원하는 것이라면, DoxaLogos의 대답은 아마도 당신이 찾고있는 것과 비슷할 것입니다.
import pdb; pdb.set_trace()
의 등가 IPython은 다음과 같습니다 :
from IPython.ipapi import make_session; make_session()
from IPython.Debugger import Pdb; Pdb().set_trace()
약간 장황하지만 ipdb가 설치되어 있지 않은지 알고있는 것이 좋습니다. make_session
콜은 색 구성표 등을 설정하는 데 한 번만 필요하며, set_trace
통화는 중단해야하는 모든 위치에 배치 할 수 있습니다.
쉬운 빠른 속도와 방향 : 당신이 당신의 프로그램을 디버깅을 시작하여 원하는 목적지
이from IPython.Debugger import Tracer
debug = Tracer()
그럼 그냥
debug()
물품.
'ImportError : Python 3.4/IPython 3에 'IPython.Debugger'라는 이름의 모듈이 없습니다. – ostrokach
IPython 0에서.11, 당신은 당신의 프로그램이이
In [5]: cat > tmpf.py
a = 1
from IPython import embed
embed() # drop into an IPython session.
# Any variables you define or modify here
# will not affect program execution
c = 2
^D
이 당신이 그것을 실행할 때 무슨 일처럼 보일 수 있습니다이
같은 코드에서 직접 IPython을 포함 할 수 있습니다 (I 임의로 기존의 ipython 세션 내에서 실행하기로 결정했습니다. 내 경험에 이처럼 ipython 세션을 중첩하면 충돌이 발생할 수 있습니다.)
In [6]:
In [6]: run tmpf.py
Python 2.7.2 (default, Aug 25 2011, 00:06:33)
Type "copyright", "credits" or "license" for more information.
IPython 0.11 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: who
a embed
In [2]: a
Out[2]: 1
In [3]:
Do you really want to exit ([y]/n)? y
In [7]: who
a c embed
이것은 IPython 세션으로 떨어지는 것이 매우 멋지다. 정말 고맙습니다! – joon
나는 이것을 어리석게도 (거의 무한한) 루프 안에 두었다. 어떻게 나가야합니까? – gerrit
@gerrit 아직 Ctrl + d를 누르면됩니다. – confused00
:
이__import__('IPython').Debugger.Pdb(color_scheme='Linux').set_trace()
최신 버전은 사용할 수 있습니다 : 당신이 경우
__import__('IPython').core.debugger.Pdb(color_scheme='Linux').set_trace()
을 IPython의 최신 버전 (0.10.2 이상)을 사용하면 다음과 같은 것을 사용할 수 있습니다.
from IPython.core.debugger import Pdb
Pdb().set_trace()
하지만 ipdb를 사용하는 것이 더 낫다.
모듈이 최근에 조금 뒤섞여있는 것처럼 보입니다. 나를
from IPython.core.debugger import Tracer; breakpoint = Tracer()
breakpoint() # <= wherever you want to set the breakpoint
비록 슬프게도, 모든 꽤 worthless in qtconsole있어를 들어 IPython 0.13.1 다음 작품에서.
최신 버전의 IPython은 IPython 세션을 모든 Python 프로그램에 포함하고 중첩 할 수있는 쉬운 메커니즘을 제공합니다. 당신은 IPython 세션을 포함 할 the following recipe을 따를 수 있습니다 : 당신이 IPython 쉘에 드롭 할 때마다
이try:
get_ipython
except NameError:
banner=exit_msg=''
else:
banner = '*** Nested interpreter ***'
exit_msg = '*** Back in main IPython ***'
# First import the embed function
from IPython.frontend.terminal.embed import InteractiveShellEmbed
# Now create the IPython shell instance. Put ipshell() anywhere in your code
# where you want it to open.
ipshell = InteractiveShellEmbed(banner1=banner, exit_msg=exit_msg)
그런 ipshell()
을 사용합니다. 이렇게하면 코드에 IPython 해석기를 포함 (심지어 중첩) 할 수 있습니다.
나는 몇 일간 시간을 정해 두었을 때 대답을 추가해야만했다. 때로는 정상적으로 스크립트를 실행할 수 있고, 오류가 발생했을 때 ipython/ipdb에 놓기 만하면된다. ipdb.set_trace()
중단 점 코드
ipython --pdb -c "%run path/to/my/script.py --with-args here"
(물론 처음 pip install ipython
및 pip install ipdb
)
감사합니다. 조금 더 간단합니다 :'ipython --pdb - ./path/to/my/script --with-args here' – alisianoi
- 1. Java 코드에서 OpenMP를 어떻게 사용할 수 있습니까?
- 2. 스톱워치를 프로덕션 코드에서 사용할 수 있습니까?
- 3. 어떻게 iPython을 죽이지 않고 파이썬 스크립트를 죽일 수 있습니까?
- 4. Snow Leopard에서 iPython을 설치하는 방법
- 5. IronPython에서 IPython을 사용하는 방법
- 6. .NET 3.5를 타겟팅하는 코드에서 선택적 매개 변수를 사용할 수 있습니까?
- 7. 브라우저에서 실행되는 코드에서 어떤 사용자 정보를 사용할 수 있습니까?
- 8. 구조체 패딩을 사용자 코드에서 안전하게 사용할 수 있습니까?
- 9. C++ 코드에서 C 라이브러리를 어떻게 사용할 수 있습니까?
- 10. Objective-C 코드에서 objc_memmove_collectable을 직접 사용할 수 있습니까?
- 11. 내 코드에서 eclipse indenter를 어떻게 사용할 수 있습니까?
- 12. 인라인 어셈블리 코드에서 특정 레지스터를 강제로 사용할 수 있습니까?
- 13. ironpython에서 ipython을 사용하기 위해 필요한 것은 무엇입니까?
- 14. 비 대화식 모드에서 ipython을 실행
- 15. pushState를 사용할 수 있습니까?
- 16. 코드에서 NetTcpBinding을 할 수 있습니까? 너?
- 17. 을 사용할 수 있습니까?
- 18. 타이머를 사용할 수 있습니까?
- 19. alcheMo를 사용할 수 있습니까?
- 20. jquery를 사용할 수 있습니까?
- 21. TestContext.Properties를 사용할 수 있습니까?
- 22. 을 사용할 수 있습니까?
- 23. killProcess를 사용할 수 있습니까?
- 24. Auto_publish를 사용할 수 있습니까?
- 25. 코드에서 ASP.NET RegSQL을 호출 할 수 있습니까?
- 26. .NET datatable visualizer를 코드에서 시작할 수 있습니까?
- 27. 코드에서 android : icon을 정의 할 수 있습니까?
- 28. 코드에서 iPhone의 PNG를 어떻게 밝힐 수 있습니까?
- 29. Lua 코드에서 .net dll을로드 할 수 있습니까?
- 30. 통화 코드에서 통화 기호를 파생시킬 수 있습니까?
굉장! 너무 멋져! – Geo
Django와 놀랍도록 잘 작동합니다. 글쎄, 필자가 입력하는 텍스트를 볼 수 없다는 점을 제외하고는 (ipdb의 6 행 이후) 쉽게 고칠 수 있습니다. –
사실 Django는 runserver를위한 별도의 스레드를 생성하고 코드를 편집 할 때마다 스레드를 다시 해석합니다. 이것은 정상적으로 잘 작동하지만 스레드가 죽을 때 pdb에 앉아 있으면 터미널이 미쳐 버립니다. runserver, runniny 'stty sane'을 빠져 나온 다음 runserver를 다시 시작하여이 문제를 해결할 수 있습니다. –