2013-07-01 59 views
4

我一直在使用sys.settrace函數爲我的程序編寫一個跟蹤器,除非它看起來沒有調用內置函數,就像open('filename.txt')一樣。這種行爲似乎沒有記錄,所以我不知道如果我做錯了什麼或如果這是預期的行爲。我使用Doug Hellmann的here的「trace_calls_and_returns」代碼作爲我的跟蹤功能。python的sys.settrace將不會跟蹤內置函數

如果我不能用settrace做到這一點,有沒有辦法跟蹤調用open()? 我不想使用Linux的strace,因爲它會運行整個程序(不只是我想跟蹤的部分),並且不會顯示我的python行號/文件名等。 另一個選項I考慮是猴子修補通過包裝開放功能,如:

import traceback, __builtin__ 
def wrapped_open(*arg,**kw): 
     print 'open called' 
     traceback.print_stack() 
     f = __builtin__.open(*arg,**kw) 
     return f 
open = wrapped_open 

但這對我來說似乎非常脆弱。

有人可以提出一個更好的方法來做到這一點?

回答