Я работаю над довольно сложным проектом, и время от времени мне приходится сужать проблемы, глядя на следы стеков. Они бывают очень длинными и включают «мой» код, код стандартной библиотеки и код сторонних библиотек одновременно. Большую часть времени настоящая проблема заключается в «моем» коде, и найти его мгновенно в трассировке стека сложно для глаз. Под «моим» кодом я подразумеваю код, который находится в текущем рабочем каталоге.
Итак, я понял, что хочу что-то, что раскрасит следы стека и выделит мои линии. Сравните оригинал с выделенным .
Я мог бы написать скрипт на Python, который мог бы использовать таким образом:
nosetests | colorize_stack_trace.py
Но я считаю, что есть более быстрый и элегантный способ сделать это с помощью набора инструментов Linux. Есть идеи?
UPD:
Используя суперкат, предложенный Деннисом Уильямсоном, промежуточным результатом является следующая функция bash:
pyst() {
rc=/tmp/spcrc;
echo '#################### ### # # # ########################################' > $rc;
echo ' blk 0 r ^(.*)$' >> $rc;
echo ' mag b 0 r ^\s*File "'`pwd`'/(.*)"' >> $rc;
spc -c $rc;
}
Теперь я могу сделать:
nosetests 2>&1 | pyst
Не слишком элегантно, но работает в некоторой степени. Осталось две проблемы:
- Я не вижу выходных данных до завершения тестирования носа. То есть Я не вижу прогресса.
- Я должен писать 2> & 1 снова и снова.
UPD 2:
Задавая этот вопрос, я имел в виду, в основном, nosetests
. И я только что нашел отличное решение: rednose плагин для носа. Он выделяет локальные пути, а также делает множество удобных для восприятия вещей.
Возвращаясь к первоначальному вопросу: проблемы, которые я отметил с суперкатом, не относятся к нему полностью, но это проблема потоковой передачи, очистки, пересылки, перенаправления оболочки Unix. Так как в качестве ответа на вопрос спросил я принимаю ответ, который предлагает суперкат.