2009-10-30 2 views
8

Scénario:Capturing STDOUT et STDERR d'un programme externe * tout * il est l'exécution (Ruby)

Je dois appeler un programme externe de mon script Ruby, et ce programme envoie beaucoup d'informations utiles (mais cryptique) à stdout et stderr.

Alors que le programme fonctionne, je voudrais analyser les lignes qu'il envoie à stdout et stderr et:

  • les supprimer si pas nécessaire
  • reformater/les remplacer si nécessaire

J'ai essayé toutes les astuces habituelles (système, exec, popen, popen3, backticks, etc.), mais je ne peux récupérer que stdout/stderr après le programme est exécuté, pas pendant son exécution.

Des idées?

Oh, et je suis sous Windows :-(

+0

Pouvez-vous donner un exemple de l'un de vos «trucs» (par exemple, popen)? –

+0

Je suppose que Windows n'a pas de tuyaux –

+0

@jug: Windows ont des pipes parfaitement valides. –

Répondre

14

En fait, il était plus simple que ce que je pensais, cela semble fonctionner parfaitement:

STDOUT.sync = true # That's all it takes... 
IO.popen(command+" 2>&1") do |pipe| # Redirection is performed using operators 
    pipe.sync = true 
    while str = pipe.gets 
    puts "-> "+str # This is synchronous! 
    end 
end 

... et oui, il fonctionne sur Windows

Questions connexes