Sto lavorando a un progetto abbastanza complesso e di volta in volta devo restringere i problemi guardando le tracce dello stack. Sono molto lunghi e coinvolgono contemporaneamente il "mio" codice, il codice della libreria standard e il codice delle librerie di terze parti. Il più delle volte il vero problema è nel "mio" codice e individuarlo immediatamente in una traccia di stack è un po 'difficile per gli occhi. Sotto "my" code intendo il codice che si trova nella directory di lavoro corrente.Evidenziazione delle tracce dello stack python
Quindi ho capito che voglio qualcosa che colorizzi le tracce dello stack e le linee di evidenziazione che sono mie. Confronta original a highlighted.
ho potuto scrivere uno script python che potrei usare in questo modo:
nosetests | colorize_stack_trace.py
ma credo che ci sia un modo più rapido e più elegante per fare questo usando set di strumenti di Linux. Qualche idea?
UPD:
Utilizzando supercat suggerito da Dennis Williamson, il risultato intermedio sta seguendo la funzione bash:
pyst() {
rc=/tmp/spcrc;
echo '#################### ### # # # ########################################' > $rc;
echo ' blk 0 r ^(.*)$' >> $rc;
echo ' mag b 0 r ^\s*File "'`pwd`'/(.*)"' >> $rc;
spc -c $rc;
}
Ora posso fare:
nosetests 2>&1 | pyst
Non
troppo eleganti, ma funziona in una certa misura. Sono rimasti due problemi:
- Non riesco a vedere alcun output prima del completamento di nosetests. Cioè Non vedo i progressi.
- Devo scrivere 2> & 1 ancora e ancora.
UPD 2:
Chiedendo a questa domanda ho dovuto principalmente nosetests
in mente. E ho appena trovato un'ottima soluzione: plug-in rednose nose. Mette in evidenza percorsi che sono locali e fanno molte cose più leggibili a portata di mano.
Tornando alla domanda originale: i problemi che ho notato con il supercat non si riferiscono ad esso completamente ma è un problema di streaming shell Unix, flushing, piping, reindirizzamento. Quindi come risposta alla domanda ho chiesto accetto una risposta che suggerisca la supercat.
rednose è bello. Puoi averlo abilitato di default aggiungendo 'rednose = 1' al tuo' .noserc' –