Я работаю над довольно сложным проектом, и время от времени я должен сузить проблемы, смотря на следы стека. Они случаются очень долго и включают в себя "мой" код, стандартный библиотечный код и код сторонних библиотек одновременно. Большую часть времени реальная проблема заключается в "моем" коде и мгновенном обнаружении ее в трассировке стека, это немного сложно для глаз. Под "моим" кодом я имею в виду код, находящийся в текущем рабочем каталоге.
Итак, я понял, что хочу что-то, что будет раскрашивать трассировки стека и выделять строки, которые являются моими. Сравните оригинал с выделен.
Я мог бы написать python script, который мог бы использовать этот способ:
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 плагин для носа. Он выделяет пути, которые являются локальными, и делает еще много удобных возможностей для чтения.
Возвращаясь к исходному вопросу: проблемы, которые я заметил с помощью supercat, не относятся к нему полностью, но его проблема в потоковой передаче, промывке, пересылке, перенаправлении Unix. Так как в качестве ответа на заданный вопрос я принимаю ответ, который предлагает supercat.