2017-04-04 3 views
1

Wie kann ich kontinuierlich die Ergebnisse eines lang laufenden Shell-Befehls ausgeben, wenn die Ausgabe verfügbar wird?Ruby kontinuierlich output stdout eines lang laufenden Shell-Befehls

Zur Zeit muss ich dies tun (was ich nur nach Befehl beendet ist sehen)

setzt long_running_shell_command

Was ich vom Konzept her ist

puts_immediately tun wollen long_running_shell_command

+0

Wie führen Sie Ihren Shell-Befehl aus? Der von Ihnen gewählte Ausführungsstil bestimmt, ob Sie einen Datenstrom (der kontinuierlich ausgegeben wird) oder gepufferte Daten (die alle auf einmal gedruckt werden) erhalten. – eiko

Antwort

0

Schalten Sie die neue Ausgabe an STDOUT:

# waits a second, prints the current directory's contents, waits 5 seconds 
system('sleep 1; ls; sleep 5', out: STDOUT) 
0

Meine Lieblings-Weg mit Shell-Befehlen ist wie so zu arbeiten:

Open3.popen3 "shellcommand --args --more-args" do |stdin, stdout, stderr, thread| 
    while line = stdout.gets 
    puts line 
    end 
end 

Der Befehl gibt Ihnen Eingangs-, Ausgangs- und Fehlerströmen. Sie können stdout.gets anrufen, um die nächste Ausgabezeile (mein Favorit) zu erhalten, oder stdout.getc für das nächste Zeichen, wenn Sie wirklich sofort wollen. Die Funktion wartet, bis die Eingabe verfügbar ist, und gibt nach Abschluss des Befehls den Wert nil zurück. Eine gängige Methode besteht darin, den Befehl in eine while-Schleife zu schreiben und eine Reihe von Befehlen wiederholt auszuführen, bis der Befehl abgeschlossen ist.

Verwandte Themen