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
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
···
On 9/3/06, brian.kejser@protexis.com <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?
Hi
Comments made inline ....
···
-----Original Message-----
From: "Jan Svitok" <jan.svitok@gmail.com>
Sent: Sun, September 3, 2006 19:23
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Subject: Re: Invoking External Program
On 9/3/06, brian.kejser@protexis.com <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] Ruby | zenspider.com | by ryan davis
[3] http://ruby-doc.org/stdlib/libdoc/open3/rdoc/index.html
Yeah. It doesn't look like popen3 is supported on windows.
Thanks