trace python:只包含一些文件

时间:2014-09-04 13:45:29

标签: python debugging trace

我知道我可以使用它来跟踪命令执行:

python -m trace -t script.py

但是我想减少输出:只显示我的src /(pip install -e ...)中的文件。

我该怎么做?

4 个答案:

答案 0 :(得分:10)

我的解决方案基于Brian Cain的回答:

export PYTHONIOENCODING=utf-8
python -m trace --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t script.py

我的virtualenv直接在$ HOME中,我的代码安装在$ HOME / src中。

因为如果python代码中存在非ascii字符,我需要UnicodeErrors,因此需要PYTHONIOENCODING=utf-8;

答案 1 :(得分:5)

如果您从bash运行脚本,则可以使用以下内容:

python -m trace --ignore-dir=$(python -c 'import sys ; print ":".join(sys.path)[1:]') -t ./script.py

for python3:

python -m trace --ignore-dir=$(python -c 'import sys ; print(":".join(sys.path)[1:])') -t ./script.py

通过这种方式,您可以忽略您是否处于虚拟环境或更深奥的场景中。

答案 2 :(得分:3)

正如the documentation所述,您可以以编程方式使用trace

import sys
import trace

# create a Trace object, telling it what to ignore, and whether to
# do tracing or line-counting or both.
tracer = trace.Trace(
    ignoredirs=[sys.prefix, sys.exec_prefix],
    trace=0,
    count=1)

# run the new command using the given tracer
tracer.run('main()')

# make a report, placing output in the current directory
r = tracer.results()
r.write_results(show_missing=True, coverdir=".")

请注意ignoredirs的{​​{1}}参数。

虽然似乎没有办法明确只包含trace.Trace中的文件,但您可以排除所有系统包,出于实际目的,这些包应该相同。

答案 3 :(得分:2)

  

我想减少输出

没有白名单过滤器,但有一个黑名单:

ignore_module

  

- ignore-module =忽略每个给定的模块名称及其子模块(如果它是一个包)。参数可以是名称列表   用逗号隔开。