Ruby: Read large data from stdout and stderr of an external process on Windows
Posted
by
BinaryMuse
on Stack Overflow
See other posts from Stack Overflow
or by BinaryMuse
Published on 2011-01-11T18:51:22Z
Indexed on
2011/01/11
18:53 UTC
Read the original article
Hit count: 227
Greetings, all,
I need to run a potentially long-running process from Ruby on Windows and subsequently capture and parse the data from the external process's standard output and error. A large amount of data can be sent to each, but I am only necessarily interested in one line at a time (not capturing and storing the whole of the output).
After a bit of research, I found that the Open3 class would take care of executing the process and giving me IO
objects connected to the process's standard output and error (via popen3).
Open3.popen3("external-program.bat") do |stdin, out, err, thread|
# Step3.profit() ?
end
However, I'm not sure how to continually read from both streams without blocking the program. Since calling IO#readlines
on out
or err
when a lot of data has been sent results in a memory allocation error, I'm trying to continuously check both streams for available input, but not having much luck with any of my implementations.
Thanks in advance for any advice!
© Stack Overflow or respective owner