Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.ruby

Programmation.ruby : sortie standard

Posté par arno () le 11 septembre 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 ?

> Lire le message (3 commentaires, moyenne: 3).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

au pif...

Posté par NeoX () le 11/09/2007 à 17:14. (lien). É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 ?

--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux

Peut-être une solution ....

Posté par jlh () le 11/09/2007 à 17:16. (lien). É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.

  • [^]Re: Peut-être une solution ....

    Posté par arno () le 11/09/2007 à 17:40. (lien). Évalué à 1.

    Extra, problème résolu. Merci beaucoup. :)

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.ruby