Trace python: включить только некоторые файлы

Я знаю, что могу использовать это для отслеживания выполнения команды:

python -m trace -t script.py

Но я хочу уменьшить вывод: должны отображаться только файлы, которые находятся в моем src/(pip install -e...).

Как я могу это сделать?

Ответ 1

Мое решение основано на ответе Брайана Каина:

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

Мой virtualenv находится непосредственно в $HOME, а мой код установлен в редакторе $HOME/src.

Этот PYTHONIOENCODING=utf-8; необходим, так как я получил UnicodeErrors, если там где не ascii-символы в коде python.

Ответ 2

Если вы используете script из bash, вы можете использовать что-то вроде:

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

Таким образом, вы можете игнорировать, если вы находитесь или нет в виртуальной среде или более эзотерическом сценарии.

Ответ 3

Как документация, вы можете использовать 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 на trace.Trace.

Хотя, похоже, нет возможности явно включать только файлы в ваш src, вы можете исключить все системные пакеты, которые для практических целей должны быть одинаковыми.

Ответ 4

Я хочу уменьшить вывод

Нет белого списка, но есть черный список:

ignore_module:

- ignore-module = Игнорировать каждый из указанных имен модулей и его подмодулей (если это пакет). Аргументом может быть список имен разделенных запятой.