首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python模块"trace":缺少文件路径

Python模块"trace":缺少文件路径
EN

Stack Overflow用户
提问于 2018-05-30 15:10:31
回答 3查看 560关注 0票数 12

我正在跟踪一个python脚本,如下所示:

代码语言:javascript
复制
python -m trace --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t bin/myscript.py

有些代码行看起来像这样:

代码语言:javascript
复制
 --- modulename: __init__, funcname: getEffectiveLevel
__init__.py(1325):         logger = self
__init__.py(1326):         while logger:
__init__.py(1327):             if logger.level:
__init__.py(1329):             logger = logger.parent
__init__.py(1326):         while logger:
__init__.py(1327):             if logger.level:
__init__.py(1328):                 return logger.level

不幸的是,我不知道这些代码是从哪里来的。

有没有办法查看getEffectiveLevel()的文件名(包括路径

当然,我可以在所有已安装的python代码中搜索具有此名称的方法,但我希望立即看到文件路径。

在这种情况下,使用了Python2.7

跟踪I不是固定在标准库“

”上。我可以使用不同的库,如果它提供了所需的功能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-05 09:13:26

如果目的是查找完整路径,那么可以查看hunter项目,它甚至支持query-style跟踪。

代码语言:javascript
复制
# a modified example from docs
# do check the documentation it is easy to start with
from hunter import trace, Q, Debugger
from pdb import Pdb

trace(
    # drop into a Pdb session on``myscript.mainMethod()`` call
    Q(module="myscript", function="getEffectiveLevel", kind="call", action=Debugger(klass=Pdb)))

import myscript
myscript.mainMethod()
票数 3
EN

Stack Overflow用户

发布于 2018-06-04 20:32:02

不幸的是,没有标志/命令行选项来启用它。因此,直接的(也可能是正确的)答案是:No

如果你不介意使用内置库,你可以通过修改下面这行代码来轻松实现:

代码语言:javascript
复制
print (" --- modulename: %s, funcname: %s" 
       % (modulename, code.co_name))

通过以下方式:

代码语言:javascript
复制
print ("filename: %s, modulename: %s, funcname: %s"
       % (filename, modulename, code.co_name))

在Python安装的trace.py文件中。您可以使用以下命令找到该文件的路径:

代码语言:javascript
复制
>>> import trace
>>> trace.__file__

但我真的不想建议以这种方式修改库。在执行此操作之前(如果您决定确实要这样做),请创建该文件的备份,如果可能,请在备份完成后再次替换它。

一种更好的方法(尽管仍然很混乱)是复制上面提到的trace.py文件(例如,复制到当前工作目录中)并修改复制的文件。然后,您可以运行修改后的版本:

代码语言:javascript
复制
python path_to_modified_trace_file your_options_for_trace

不使用-m选项并使用修改后的路径,但在其他方面与原始路径相同。

票数 0
EN

Stack Overflow用户

发布于 2018-06-04 20:46:01

您可以使用以下内容创建trace2.py文件

代码语言:javascript
复制
from trace import Trace, main

original_globaltrace_lt = Trace.globaltrace_lt

def patch_Trace_globaltrace_lt(self, frame, why, arg):
    value = original_globaltrace_lt(self, frame, why, arg)
    if value:
        filename = frame.f_globals.get('__file__', "")
        print("The code is in file - %s" % (filename))
    return value

Trace.globaltrace_lt = patch_Trace_globaltrace_lt

if __name__ == "__main__":
    main()

然后像下面这样运行它

代码语言:javascript
复制
python -m trace2 --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t bin/myscript.py

输出很详细,但您可以根据需要修改函数patch_Trace_globaltrace_lt

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50598438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档