From: Jan Svitok Date: 2006-09-04T11:23:04+09:00 Subject: Re: Invoking External Program On 9/3/06, brian.kejser@protexis.com wrote: > 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? 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] http://www.zenspider.com/Languages/Ruby/QuickRef.html#18 [3] http://ruby-doc.org/stdlib/libdoc/open3/rdoc/index.html