簡體   English   中英

如何在不退出程序的情況下在linux上打印最近的最后一次調用

[英]How to print the most recent last call on linux without exiting the program

當我在linux上執行python腳本並中斷該過程時,它給了我“最近一次通話”:

Traceback (most recent call last):
  File "clustermptest.py", line 38, in <module>
    if sequences[i][x:x+3]==CAI[cailength][1]:
KeyboardInterrupt

有沒有辦法查看最近一次調用的最新內容,即腳本仍在運行/不停止腳本時當前正在處理的行?

您可以使用winpdb 附加到正在運行的程序,並允許您在各個點上對其進行中斷,檢查和恢復。


或者,您可以定義一個信號處理程序,盡管這可能不是一個完全可靠的解決方案,尤其是在使用線程的情況下:

import signal
import traceback

def sigint_handler(signal, frame):
    # ctrl-c generates SIGINT
    traceback.print_stack()
    print('-'*80)

def foo():
    total = 0
    for i in range(10**8):
        total += i
    return total

if __name__=='__main__':
    signal.signal(signal.SIGINT, sigint_handler)
    print(foo())

運行test.py ,並在不同時間點按Cc產生:

  C-c C-c  File "/home/unutbu/pybin/test.py", line 20, in <module>
    print(foo())
  File "/home/unutbu/pybin/test.py", line 14, in foo
    for i in range(10**8):
  File "/home/unutbu/pybin/test.py", line 9, in sigint_handler
    traceback.print_stack()
--------------------------------------------------------------------------------
  C-c C-c  File "/home/unutbu/pybin/test.py", line 20, in <module>
    print(foo())
  File "/home/unutbu/pybin/test.py", line 15, in foo
    total += i
  File "/home/unutbu/pybin/test.py", line 9, in sigint_handler
    traceback.print_stack()
--------------------------------------------------------------------------------
4999999950000000

參考文獻:

  1. 信號模塊 (請務必閱讀警告)
  2. 追溯模塊
  3. 道格·海爾曼(Doug Hellman)的每周Python模塊使用信號教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM