Sto lavorando a uno script che utilizza IO.popen per aprire un altro programma e leggere continuamente i dati. E 'in questo modo:Ruby IO.popen buffering STDOUT
process = IO.popen(["/the/program", "argument", "argument"])
loop do
line = process.gets
puts "#{line}"
end
(Il programma vero e proprio non si limita a stampare l'uscita, ovviamente - questo è solo un esempio.)
Il problema che sto funzionando in è che popen sembra essere il buffering STDOUT dal processo aperto. L'ho confermato eseguendo il programma direttamente da una shell e tramite il popen, fianco a fianco, e il Ruby non ottiene mai una riga alla volta. Ottiene sempre più righe alla volta e viene ritardato.
Ho provato
STDOUT.sync = true
... prima di popen, ma che non è cambiato nulla.
Il programma in questione usa definitivamente \ n come una nuova riga, quindi non è questo il problema.
Hai provato 'process.sync = true'? – DNNX
@ Eddie l'hai capito? –