Invoking External Program

Hi

I’ve been able to launch an external program and read standard output
using the following code.

IO.popen(“program.exe”, ‘r+’) do |io|
io.puts “command line input”
io.close_write
puts io.read
end

  1. How would I add a timeout to the command (e.g. 10 seconds)?
  2. How would I check the error level (e.g. 0, 1, etc)?
  3. How would I read standard error?

Thanks

On 9/3/06, [email protected] [email protected] wrote:

  1. How would I add a timeout to the command (e.g. 10 seconds)?
  2. How would I check the error level (e.g. 0, 1, etc)?
  3. How would I read standard error?

Just quick, uncomplete answers (from .exe I guess you are on windows):

  1. try using Timeout.timeout [1] but I’m not sure how successful
    you’ll be - when the program blocks then you probably won’t be able to
    do anything. When the timeout elapses, you’d need to kill the process.

  2. use $? [2]

  3. look for popen3 [3] or redirect stderr to stdout or a file. I’m not
    sure whether popen3 works on windows.

[1] http://ruby-doc.org/core/classes/Timeout.html#M001924
[2] Ruby | zenspider.com | by ryan davis
[3] http://ruby-doc.org/stdlib/libdoc/open3/rdoc/index.html

Hi

Comments made inline …