[gull] stdin, stdout dans un fichier

Blaise Vogel bvogel at altux.ch
Tue Aug 24 08:32:55 CEST 2010


----- "Félix Hauri" <felix at f-hauri.ch> a écrit :

...
> > Je duplique les sorties stdout et stderr d'une commande sur stdout
> et dans un fichier, soit:
> > command 2>&1|tee result.log
> > 
> > Par contre la commande peut durer pas mal de temps, et l'affichage
> sur stdout ne se fera que à la fin de la commande. J'ai pensé à un
> truc un peu "crade":
> > touch result.log
> > tail -n0 -f result.log &
> > command >>result.log 2>&1
> 
> Cette solution ne me parait pas crade du tout. Tu ``initialises''
> un pointeur de fichier avant de l'utiliser...
> Non, rien à redire...
Bof, je rêvais d'une commande en 1 ligne ...

> 
> Il s'agit d'un problème de buffer en sortie, il existe des moyens
> de désactiver, mais je n'ai pas réussi à reproduire ta situation:
> 
> $ ( echo -n coucou ; sleep 3 ) | tee /dev/null
> 
> affiche instantannément ``coucou''.
> 
> Quelle distribution utilises-tu et quel est la ``command'' que tu
> lances?
Bonne question. Debian Lenny ou Squeeze. Par contre la commande est un script python avec des sorties par 'print ...' et dans ce cas le retour ne se fait pas immédiatement. Je crois qu'il va être plus intelligent de reprendre ces scripts et d'y ajouter le module syslog ;-)
Pour test:

blaise at x02:~$ cat test.py
import time
print 'a'
time.sleep(2)
print 'b'

blaise at x02:~$ python test.py|tee /dev/null

Je remarque que j'ai le même comportement si je renvoie le retour de la commande dans un fichier, le fichier est écrit seulement à la fin de la commande. Par exemple:
blaise at x02:~$ python test.py >> result.log


Blaise Vogel




More information about the gull mailing list