gpt4 book ai didi

python - 跟踪python解释器的执行路径

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:11 33 4
gpt4 key购买 nike

下面的代码很好地了解了解释器的作用:

python -m trace --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t path-to/script.py

但是行数太多了。我想隐藏导入文件期间发生的行。

示例:我对这样的行不感兴趣:

saved_filter.py(9): class SavedFilter(models.Model):
saved_filter.py(10): name = models.TextField(max_length=256)
saved_filter.py(11): user = models.ForeignKey('auth.User', null=True, blank=True)

我在文档中找不到解决方案: https://docs.python.org/2/library/trace.html

更新如果有不同的方法来获得结果,例如不同的 python 包(不是 trace),这也是一个很好的解决方案。

更新 2跟踪应该是非交互式的。

更新 3

我尝试了 Martin v. Löwis 提供的解决方案。它在某些情况下有效,但并非全部。

文件 foo.py

import bar

def main():
f=bar.Foo()
f.my_func()

if __name__=='__main__':
main()

文件bar.py

class Foo(object):
def my_func(self):
def inner():
print('#in inner')
return 'inner'
print('#in my_func()')
inner()
return 1

如果我调用 foo.py,所需的结果类似于:

foo.py: f=bar.Foo()foo.py: f.my_func() 函数bar.py: print('#in my_func()')bar.py:内部()bar.py: print('#in inner')bar.py: 返回'内部'bar.py: 返回 1

trace2.py的结果

> python tmp/trace2-orig.py --trace tmp/foo.py 
--- modulename: foo, funcname: <module>
--- modulename: bar, funcname: <module>
--- modulename: bar, funcname: Foo
bar.py(1): class Foo(object): <======= Import lines
bar.py(2): def my_func(self):
--- modulename: foo, funcname: main
foo.py(4): f=bar.Foo()
foo.py(5): f.my_func()
--- modulename: bar, funcname: my_func
bar.py(3): def inner():
bar.py(6): print('#in my_func()')
#in my_func()
bar.py(7): inner()
--- modulename: bar, funcname: inner
bar.py(4): print('#in inner')
#in inner
bar.py(5): return 'inner'
bar.py(8): return 1
--- modulename: trace, funcname: _unsettrace
trace.py(80): sys.settrace(None)

不幸的是,仍然有 class Foo(object) 是在导入期间执行的。

我猜代码加载和执行的检测并不能涵盖所有情况。

最佳答案

如果您创建脚本 trace2.py 为

import trace

OrigTrace = trace.Trace
class Trace2(trace.Trace):
def localtrace_trace(self, frame, why, arg):
if why == "line" and frame.f_code.co_name == '<module>':
return self.localtrace
return OrigTrace.localtrace_trace(self, frame, why, arg)

trace.Trace=Trace2
trace.main()

并运行 python -m trace2 -t script.py 您将看不到来自模块级别行的跟踪输出。

关于python - 跟踪python解释器的执行路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27291276/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com