Estoy trabajando en un proyecto bastante complejo y una y otra vez tengo que reducir los problemas al buscar en los rastreos de la pila. Resulta que son muy largos e involucran "mi" código, código de biblioteca estándar y código de bibliotecas de terceros al mismo tiempo. La mayoría de las veces, el verdadero problema está en "mi" código y localizarlo instantáneamente en un rastro de pila es un poco difícil para los ojos. En "mi" código quiero decir el código que está bajo el directorio de trabajo actual.Resaltando las trazas de la pila de python
Me di cuenta de que quería algo que coloreara los restos de la pila y resaltara las líneas que son mías. Comparar original a highlighted.
podría escribir un script en Python que podría utilizar de esta manera:
nosetests | colorize_stack_trace.py
Pero creo que hay una manera más rápida y más elegante de hacer esto utilizando el conjunto de herramientas de Linux. ¿Algunas ideas?
UPD:
Usando supercat sugerido por Dennis Williamson, el resultado intermedio está siguiendo función bash:
pyst() {
rc=/tmp/spcrc;
echo '#################### ### # # # ########################################' > $rc;
echo ' blk 0 r ^(.*)$' >> $rc;
echo ' mag b 0 r ^\s*File "'`pwd`'/(.*)"' >> $rc;
spc -c $rc;
}
ahora que puedo hacer:
nosetests 2>&1 | pyst
No
demasiado elegante, pero funciona en cierto grado. Quedan dos problemas:
- No puedo ver ninguna salida antes de que finalice la prueba de nariz. Es decir. No veo el progreso.
- Tengo que escribir 2> & 1 una y otra vez.
UPD 2:
Hacerse esta pregunta que tenía principalmente nosetests
en mente. Y acabo de encontrar una gran solución: rednose complemento de la nariz. Destaca los caminos que son locales y hace muchas cosas más prácticas de legibilidad.
Volviendo a la pregunta original: los problemas que noté con supercat no se relacionan por completo, pero es un problema de transmisión de shell Unix, enrojecimiento, tuberías, redirección. Entonces, como respuesta a la pregunta preguntado acepto una respuesta que sugiere supercaptura.
rednose es agradable. Puede tenerlo habilitado por defecto agregando 'rednose = 1' a su' .noserc' –