2015-11-07 72 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) 

您可以將您打印您回溯