2017-04-04 69 views
1

隨着輸出可用,我該如何連續輸出長時間運行的shell命令的結果?Ruby不斷輸出長時間運行的shell命令的標準輸出

目前我需要做到這一點(我可以命令完成後,只看到)

提出long_running_shell_command

我想從概念上做的是

puts_immediately long_running_shell_command

+0

你怎麼執行你的shell命令?您選擇的執行風格決定您是否會獲得數據流(可持續輸出)或緩衝數據(一次打印)。 – eiko

回答

0

輸出重定向到STDOUT

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

我用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循環中,並在命令完成之前重複執行一組命令。

相關問題