Ich bin relativ neu in Ruby und kann anscheinend keine Möglichkeit finden, die Ausgabe eines externen Befehls zu erhalten. Ich muss die vom Befehl zurückgegebenen Werte extrahieren. Denn jetzt habe ich so etwas wie diese:Extrahiere Wert von stdout von Open3.popen3 durch RegEx und speichere es
stdin, stdout, stderr, wait_thr = Open3.popen3("#{path}/foobar", configfile)
if /exit 0/ =~ wait_thr.value.to_s
runlog.puts("Foobar exited normally.\n")
puts "Test completed."
someoutputvalue = stdout.read("TX.*\s+(\d+)\s+")
puts "Output value: " + someoutputvalue
end
Aber ich bin mit eindeutig nicht der richtigen Methode auf stdout seit Rubin mir sagt, es String in Integer nicht konvertieren kann.
Was wäre der richtige Weg, dies zu tun? Ich kann nirgendwo in der Dokumentation die für stdout verfügbaren Methoden finden. Mit stout.read
benutze ich Ruby 1.9.3.
aktualisieren
Um ganz klar zu sein, ich versuche, die Ausgabe des Programms zu lesen, einen regulären Ausdruck anwenden, und speichern Sie die extrahierten Wert in eine Variable für eine spätere Verwendung.
Also wenn die Ausgabe ist "TX So und so: 28" Ich möchte nur "28" bekommen (Ich validiert, dass die Regex oben entspricht, was ich übereinstimmen muss, frage ich mich nur, wie zu speichern dieser extrahierte Wert in einer Variablen).
Wenn Sie nicht auf den Prozess kommunizieren wollen und nur seine Ausgabe lesen, 'capture3' wäre besser geeignet (und einfach). –
Was ist das Argument zu lesen? Ich dachte, das einzige Argument, an dem du vorbeikamst, war, wie weit du in den Strom gehen solltest? Vielleicht versucht es, Ihr String-Argument als die ganze Zahl von Bytes zu behandeln? –
@JoePym Das Argument ist eine XML-Datei, die von foobar zum Ausführen verwendet wird, wenn das Ihre Frage ist. – Astaar