From: brian.kejser@... Date: 2006-09-05T08:16:47+09:00 Subject: Re: Invoking External Program Hi Comments made inline .... -----Original Message----- From: "Jan Svitok" Sent: Sun, September 3, 2006 19:23 To: "ruby-talk ML" 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. Thanks. It worked. > 2. use $? [2] It didn't work, however, the following code did. exitstatus = Process.waitpid2(io.pid)[1].exitstatus Are there any problems with getting the exit status by this means? > 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 Yeah. It doesn't look like popen3 is supported on windows. Thanks