Bonjour,
je coince depuis plusieurs heures sur un truc génant que je ne comprends pas. J'ai un programme ruby que j'ai fait qui copie des gros fichiers et qui écrit sur la sortie standard son avancement. Ca écrit que la copie du premier fichier est en cours, puis pareil pour le second fichier etc.
En ligne de commande ça marche impec. Par contre si je lance ça avec une redirection pour que l'affichage se fasse dans un fichier log alors le fichier log reste vide jusqu'à la fin de mon programme. Une fois que mon programme se termine alors le fichier log contient tout ce qu'il faut.
J'ai essayé de faire sync mais ça ne change rien. J'ai mis une pause entre chaque copie et le fichier log se rempli lors de chaque pause.
D'après vous ça vient de ruby ou du shell ou du noyau ? Et vous avez une idée pour résoudre ce problème ?
# fais voir ;)
Posté par santos . Évalué à 3.
fais voir la ligne que tu tapes pour lancer ton appli en redirigeant vers le fichier.
[^] # Re: fais voir ;)
Posté par gremous . Évalué à 2.
sauvegarde.rb >> /var/log/sauvegarde 2>&1
# Mise en mémoire tampon de la sortie standard
Posté par niol (site web personnel) . Évalué à 5.
[^] # Re: Mise en mémoire tampon de la sortie standard
Posté par Kerro . Évalué à 3.
La syntaxe est: $stdout.flush
Cette instruction est à mettre à chaque fois que tu veux être certain que l'affichage soit bon.
Ou même: $stdout.sync = true
Ce qui permet de ne plus mettre de flush partout.
note: je n'ai pas testé avec une redirection.
[^] # Re: Mise en mémoire tampon de la sortie standard
Posté par gremous . Évalué à 1.
# Bufferisation
Posté par Sébastien Koechlin . Évalué à -1.
Il doit y avoir un moyen de le désactiver.
(En perl c'est "$|=1;", je sais, cette information ne te sert à rien.)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.