我一直在使用 sys.settrace 函数为我的程序编写跟踪器,它工作得很好,只是它似乎没有被内置函数调用,比如 open('filename.txt')。这种行为似乎没有记录在案,所以我不确定我是否做错了什么,或者这是否是预期的行为。我在这里使用 Doug Hellmann 的“trace_calls_and_returns”代码作为我的跟踪功能。
如果我不能用 settrace 做到这一点,有没有办法跟踪对 open() 的调用?我不想使用 Linux 的 strace,因为它会为整个程序运行(不仅仅是我想要跟踪的部分)并且不会显示我的 python 行号/文件名等。我考虑的另一个选项是通过包装器对 open 函数进行猴子修补,例如:
import traceback, __builtin__
def wrapped_open(*arg,**kw):
print 'open called'
traceback.print_stack()
f = __builtin__.open(*arg,**kw)
return f
open = wrapped_open
但这对我来说似乎很脆弱。
有人可以提出更好的方法吗?