2013-07-01 35 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 

但这对我来说似乎非常脆弱。

有人可以提出一个更好的方法来做到这一点?

回答