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
}
這是愚蠢的......但它的作品。
任何更優雅的方式,以及更有效的方式來做到這一點?性能很糟糕,好像「刷新率」很慢。
感謝...但隨後有還有那些我想趕上。我只是想像從shell那裏調用命令而不是從ruby那樣接收輸出! – MichaelC 2014-09-19 21:43:19