Python的trace模块和文件路径

2 投票
1 回答
1106 浏览
提问于 2025-04-17 13:29

我正在使用 Python的 trace 模块 来跟踪一些代码的执行情况。我注意到,当执行结果被打印出来时,它的格式是这样的(下面是一个简单的示例):

<filename>(<line number>): <line of code>

我想知道是否可以获取完整的文件路径(无论是绝对路径还是相对路径),而不仅仅是文件名。我觉得在调用 trace.Trace 的时候应该有一个选项可以让我做到这一点,但我在文档中找不到这样的参数。

如果没有这样的选项,我该如何获取文件路径呢?我想我可以检查 sys.path 中的所有目录,但如果有两个不同的目录里有同名的文件,我该怎么处理呢?

1 个回答

0

这不是很明显,但我发现如果我在使用 trace 的时候加上 countfuncs 参数,或者在命令行使用 trace 时加上 --listfuncs 参数,我就能得到完整的路径名。因此,对于这个程序:

import trace
from recurse import recurse

tracer = trace.Trace(count=False, trace=True, countfuncs=True)
tracer.run('recurse(2)')
tracer.results().write_results()

...(使用 Doug Hellmann 的例子,来自 这里),我得到了以下输出:

functions called:
filename: <string>, modulename: <string>, funcname: <module>
filename: C:\Python33\lib\encodings\cp850.py, modulename: cp850, funcname: IncrementalEncoder.encode
filename: C:\Python33\lib\trace.py, modulename: trace, funcname: _unsettrace
filename: C:\usr\sjl\dev\test\python\recurse.py, modulename: recurse, funcname: recurse

这并不是你想要的结果,因为你可以看到它忽略了追踪代码行的指令,所以在那些代码行旁边没有给出文件路径。不过,它确实告诉你 Python 脚本使用了哪些文件。

撰写回答