Python的trace模块和文件路径
我正在使用 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 脚本使用了哪些文件。