2017-03-19 1 views
0

Je rencontre des problèmes avec la combinaison de python, temps et tee.Rediriger le script python stdout + le temps pour le fichier ET pour l'écran avec des arguments

J'ai un script script.sh qui contient la ligne suivante:

{ time python extractPassRate.py -i DataPaths/background.list -o PassRates/background.csv ; } 2>&1 | tee log.log 

Cependant, quand je fais:

source script.sh 

Le terminal se bloque juste.

Il est intéressant quand je remplacerai cette ligne avec:

{ time python extractPassRate.py ; } 2>&1 | tee log.log 

(qui est, si je retire les arguments de script python) ou

{ time python extractPassRate.py -i DataPaths/background.list -o PassRates/background.csv ; } 2>&1 

(pas d'économie à log.log)

Le script fonctionne.

Y at-il un problème avec la première ligne?

Répondre

0

googler autour, je trouve ici la solution, par Matthew Alpert: How to redirect output to a file and stdout

Il semble que cela est dû à un problème de mise en mémoire tampon.

réponse de Matthieu dit:

Le unbuffer du programme, une partie du paquet attendre, va résoudre le problème de la mise en mémoire tampon . Cela entraînera stdout et stderr à écrire sur l'écran et le fichier immédiatement et les garder en synchronisation lors de la combinaison et redirigé vers le tee. E.g .:

$ programme unbuffer [arguments ...] 2> & 1 | sortie de fichier

Qui a fonctionné pour moi