我一直在使用sys.settrace函数为我的程序编写一个跟踪器,除了它似乎没有被调用内置函数之外,它运行得很好,比如open('filename.txt') 。这种行为似乎没有记录,所以我不确定我是否做错了或者这是否是预期的行为。我使用来自here 的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
但这对我来说似乎很脆弱。
有人可以建议更好的方法吗?
答案 0 :(得分:3)
您将无法跟踪导入到python和open()
is not pure python, it's a C binding from CPython part of the Python distribution的已编译代码。
因此,你必须在open()
内追踪的唯一方法是选择strace
或等同物,但无论如何,都要超越python可以自我反省。