2014-09-19 47 views
0

我嘗試在Ruby中運行外部命令並解析其輸出。Ruby:即使沒有換行符,也能獲得外部命令的輸出

IO.popen(command, :err=>[:child, :out]) {|ls_io| 
    ls_io.each do |line| 
    print line 
end 
} 

做的這種方式創造奇蹟......除非我解析C-程序,顯示它推動與\ r到標準輸出的進度輸出。

只要c程序沒有輸出\ n(只要它還沒有完成一些長時間的操作),Ruby就會等待並看不到任何東西。然後,當一個\ n被輸出,紅寶石看到它所有

1%\r2%\r3%\r…100% 
task finished 

我嘗試了所有的許多方式來調用外部命令(例如Calling shell commands from Ruby);但似乎沒有任何進展。我也試過每一個opeartor,如STDOUT.sync = true,並且c程序確實叫fflush(stdout)

我終於找到了一個workaroud。我這樣做:

IO.popen(commande, :err=>[:child, :out]) {|ls_io| 
while true 
    byte=ls_io.read(1) 
    if byte.nil? 
    break 
    end 
    print byte 
end 
} 

這是愚蠢的......但它的作品。

任何更優雅的方式,以及更有效的方式來做到這一點?性能很糟糕,好像「刷新率」很慢。

回答

相關問題