Forum Programmation.ruby Redirection de commande

Posté par  .
Étiquettes : aucune
0
5
mai
2006
Bonjour a tous,

Je cherche a rediriger la sortie de la commande tail -f "nom_fichier" lancé par un processus fils vers l'entrer standard du processus père.

Objectif : récupérer en temps réel les modifications périodique de ce fichier.

Problème : je parviens avec le code suivant a rediriger la sortie de la commande tail vers l'entrée standard du processus père. Si je tape "tail -2 /usr/local/sbin/trace.txt", cela fonctionne toujours mais si je tape "tail -f /usr/local/sbin/trace.txt" alors le processus père reste bloqué en lecture, il ne reçoit pas la sorite de la commande.

rd, wr = IO.pipe

if fork
# fork renvoi un entier > 0 processus pere
wr.close
puts "Je suis le processus pere\n"
$stdin.reopen(rd)
printf($stdout, "#{rd.read} \n")
rd.close

else
# fork renvoi 0, code du fils
rd.close
$stdout.reopen(wr)
exec "tail /usr/local/sbin/trace.txt"
wr.close
end

toutes remarques seraient les bienvenues.
Merci
  • # popen

    Posté par  (site web personnel) . Évalué à 2.

    Regardes du coté de IO.popen
    [pterjan@localhost tmp]$ irb
    irb(main):001:0> io=IO.popen("tail -f test.rb")
    => #<IO:0xb7ced9d0>
    irb(main):002:0> io.readline
    => "\t\th = Net::HTTP.new(uri.host)\n"
    irb(main):003:0> io.readline
    => "\t\tbegin\n"
    irb(main):004:0> io.readline
    => "\t\t\tresp,data = h.get(uri.path, {'User-Agent'=>\"My nice app\"})\n"
    irb(main):005:0> io.readline
    => "\t\trescue\n"
    irb(main):006:0> io.readline
    => "\t\tend\n"
    
    • [^] # Re: popen

      Posté par  . Évalué à 1.

      Merci je vais regarder ça, je te tiens au courant.
      • [^] # ça marche !

        Posté par  . Évalué à 1.

        Merci encore pour ton aide, elle m'a permis d'atteindre mon objectif.

Suivre le flux des commentaires

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