2009-10-30 15 views
8

Szenario:Capturing STDOUT und STDERR eines externen Programms * während * es ist die Ausführung (Rubin)

Ich habe ein externes Programm von meinem Ruby-Skript zu nennen, und dieses Programm viele nützliche sendet (aber kryptische) info zu stout und stderr.

Während das Programm läuft, ich möchte die Linien analysieren es auf stdout und stderr sendet und:

  • sie entfernen, wenn nicht notwendig
  • Reformierte/ggf. austauschen

Ich habe versucht alle üblichen Tricks (System, Exec, Popen, Popen3, Backticks usw. etc.), aber ich kann nur stdout/stderr nach das Programm ausgeführt wird, nicht während seine Ausführung.

Irgendwelche Ideen?

Oh, und ich bin auf Windows :-(

+0

Können Sie ein Beispiel für einen Ihrer "Tricks" (sagen, Popen) geben? –

+0

Ich denke, Windows hat keine Rohre? –

+0

@jug: Windows haben perfekt gültige Rohre. –

Antwort

14

Eigentlich war es einfacher, als ich dachte, dies scheint perfekt zu arbeiten:

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 

... und ja, es funktioniert auf Windows

Verwandte Themen