我一直在使用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
但這對我來說似乎非常脆弱。
有人可以提出一個更好的方法來做到這一點?