我知道我可以使用它来跟踪命令执行:
python -m trace -t script.py
但是我想减少输出:只显示我的src /(pip install -e ...)中的文件。
我该怎么做?
答案 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)