Forum Programmation.ruby sortie standard

Posté par  .
Étiquettes : aucune
0
11
sept.
2007
Bonjour, j'essaie de me mettre un peu à ruby en ce moment et j'ai un petit soucis. Je n'arrive pas à capter où part ma chaine dans ce bout de code:


def every_n_seconds(n)
loop do
avant = Time.now
yield
intervalle = n - (Time.now - avant)
sleep(intervalle) if intervalle > 0
end
end

every_n_seconds(1) do
puts "gruik"
end


Lorsque j'éxecute ce script, dans un terminale, tout semble au poil et la bête grogne comme prévu. Par contre, si j'essaie de rediriger la sortie dans un fichier (./gruik.rb > gruik.log) ou de la traiter avec un pipe (./gruik | dzen2)... plus personne... le calme plat! Le fichier est bien créé mais reste vide et dzen2 ne semble rien recevoir. :(

Mon but c'était de surveiller /proc/net/dev pour calculer l'utilisation du réseau et d'envoyer la sortie sur dzen2 [http://gotmor.googlepages.com/dzen]. Malheureusement je me retrouve largué alors que j'avais quasi fini... comment faire ?

  • # au pif...

    Posté par  . Évalué à 1.


    Par contre, si j'essaie de rediriger la sortie dans un fichier (./gruik.rb > gruik.log) ou de la traiter avec un pipe (./gruik | dzen2)... plus personne... le calme plat! Le fichier est bien créé mais reste vide et dzen2 ne semble rien recevoir. :(


    et par contre il continue d'afficher "gruik" en ligne de commande ?
    si c'est le cas, c'est peut-etre que le puts ne sort pas sur la sortie standard (STDOUT) mais peut-etre sur STDERR ?
  • # Peut-être une solution ....

    Posté par  . Évalué à 7.

    Il semble que ce qui est envoyé sur la sortie standard est
    gardée dans un buffer.

    2 solutions :
    STDOUT.sync = true au début du programme
    ce qui oblige à écrire au fur et à mesure vers la sortie standard

    ou

    STDOUT.flush à la fin qui vide le buffer.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.