2015-11-07 77 views
2

当Python解释器被用信号终止,它通常会产生的输出,如:检查运行Python解释器

File "~/anaconda/envs/py34/lib/python3.4/site-packages/skimage/feature/orb.py", line 313, in detect_and_extract 
orientations) 
    File "~/anaconda/envs/py34/lib/python3.4/site-packages/skimage/feature/orb.py", line 218, in _extract_octave 
descriptors = _orb_loop(octave_image, keypoints, orientations) 
    File "skimage/feature/orb_cy.pyx", line 56, in skimage.feature.orb_cy._orb_loop (skimage/feature/orb_cy.c:2276) 
    File "~/anaconda/envs/py34/lib/python3.4/site-packages/numpy/core/numeric.py", line 394, in asarray 
def asarray(a, dtype=None, order=None): 
KeyboardInterrupt 

有没有产生这样的输出暂停,而不是永久性地停止时,一部分的方式运行过程?能够像这样检查正在运行的python程序是很酷的,而不会由于调试器的管理而减慢它们。

要读书人这个问题,看它是否涉及到自己的技术问题:

This popular page介绍了如何编程获取回溯输出不停止。我的问题是关于python解释器是否内置了这样的代码(为了在不停止进程的情况下得到traceback输出,可以给kill -n这样的信号一个n),这样就不必明确地将它们添加到它们的程序。看起来python解释器没有这种行为。

+2

第一款谷歌命中为“蟒蛇回溯”后暂停功能https://docs.python.org/2/library/traceback.html。那是你在找什么?我想你可以用一个信号来触发它,比如'kill -USR1 python_pid',所以你需要从一个信号处理程序中运行。让它显示主执行上下文的回溯,而不是信号处理器上下文。 –

+0

是的,您链接的页面中描述的代码肯定会允许添加到自己的程序中,以便在适当的时候侦听输入并打印堆栈跟踪。我想知道像cython或pypy这样的Python解释器是否具有类似于已经内置的东西,我可以在任何程序中使用它,而无需编写任何额外的代码。 – seewalker

+2

在这个问题中,我没有看到任何提到的内置方法来触发回退而不退出。 http://stackoverflow.com/questions/3702675/how-to-print-the-full-traceback-without-halting-the-program。但是那个问题是关于捕获异常的问题,而不仅仅是看看你的python程序目前在做什么。 (即采取像基于样本的分析器那样的样本)。 –

回答

0
from time import sleep 
import sys,traceback 
try: 
    print("hello") 
    sleep(3) 
except KeyboardInterrupt as error: 
    print("This is my traceback") 
    traceback.print_exc(sys.stdout) 

您可以将您打印您回溯