隨着輸出可用,我該如何連續輸出長時間運行的shell命令的結果?Ruby不斷輸出長時間運行的shell命令的標準輸出
目前我需要做到這一點(我可以命令完成後,只看到)
提出
long_running_shell_command
我想從概念上做的是
puts_immediately
long_running_shell_command
隨着輸出可用,我該如何連續輸出長時間運行的shell命令的結果?Ruby不斷輸出長時間運行的shell命令的標準輸出
目前我需要做到這一點(我可以命令完成後,只看到)
提出
long_running_shell_command
我想從概念上做的是
puts_immediately
long_running_shell_command
輸出重定向到STDOUT
:
# waits a second, prints the current directory's contents, waits 5 seconds
system('sleep 1; ls; sleep 5', out: STDOUT)
我用shell命令工作喜歡的方式是像這樣:
Open3.popen3 "shellcommand --args --more-args" do |stdin, stdout, stderr, thread|
while line = stdout.gets
puts line
end
end
命令爲您提供了輸入,輸出和錯誤流。如果你真的想要即時性,你可以撥打stdout.gets
來獲得下一個字符的輸出(我最喜歡的),或者stdout.getc
。該函數等待輸入可用,然後在命令完成時返回nil
,因此常用技術是將該命令封裝在while循環中,並在命令完成之前重複執行一組命令。
你怎麼執行你的shell命令?您選擇的執行風格決定您是否會獲得數據流(可持續輸出)或緩衝數據(一次打印)。 – eiko