python的sys.settrace不会跟踪内置函数

时间:2013-07-01 02:31:35

标签: python

我一直在使用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 

但这对我来说似乎很脆弱。

有人可以建议更好的方法吗?

1 个答案:

答案 0 :(得分:3)

您将无法跟踪导入到python和open() is not pure python, it's a C binding from CPython part of the Python distribution的已编译代码。

因此,你必须在open()内追踪的唯一方法是选择strace或等同物,但无论如何,都要超越python可以自我反省。

相关问题