Как напечатать полное событие трассировки, используя Babeltrace-Python API?

Как мне распечатать полную трассировку, используя API-интерфейс читателя питона babeltrace?

Используя ниже, я могу получить поля события, но как я могу напечатать полный след, как делает babeltrace.

import babeltrace
import sys

trace_collection = babeltrace.TraceCollection()
trace_path = sys.argv[1]

trace_collection.add_traces_recursive(trace_path, 'ctf')

for event in trace_collection.events:
  print event.timestamp, event.cycles, event.name

И используя словарь событий, поля могут быть получены. Но как скопировать вывод babeltrace с помощью python reader?

for event in trace_collection.events:
  for field in event.items():
    print field

Пример вывода Babeltrace:

[2015-10-20 15:16:34.600508066] (+1.481059687) samplehost sample_trace_provider:INFO: { cpu_id = 1 }, { fileAndLine = "sampletest.cpp:330", msg = "Directing trace stream to channel #0" }

Дайте мне знать, если потребуется дополнительная информация.

1 ответ

Решение

Вы не можете сделать это в одном утверждении, как вы ожидаете. Это связано с тем, что классы привязок Babeltrace Python не реализуются __str__ рекурсивно.

Формат вывода по умолчанию, который вы получаете при запуске babeltrace Команда называется ctf-text и реализована на C. Конечно, есть способ реплицировать вывод ctf-text, но вам нужно будет реализовать pretty-printer вручную в Python.

Другие вопросы по тегам