How to run a configure script from ruby and check for errors

Hi.

Let’s say I have a GNU autoconfigure based program like htop:

http://dfn.dl.sourceforge.net/sourceforge/htop/htop-0.9.tar.gz

Ok, I downloaded it and extract it. Then I change to the
extracted archive and run:

result = ./configure

Question 1:

I don’t seem to get the output of this command, when it is done
like the above way, in a line-by-line fashion. Of course I get
the whole string, but I have to wait for the output until it is
finished…

Normally via autoconfigure, I get line after line output
immediately.

I would like to have the same functionality from within ruby,
but capture the whole result into the string.

Question 2:

I want to check for errors but I am not sure how to best
do this.

For instance, an error could be like this here:

No package ‘gtk±3.0’ found

I could grep the whole string for something like that.

But perhaps there is another way? An error result that is
set and which I could use in Ruby?

Any pointers appreciated!

On Thu, Oct 13, 2011 at 8:22 AM, Marc H. [email protected]
wrote:

Question 1:

I don’t seem to get the output of this command, when it is done
like the above way.

What exactly do you mean by that? Do you expect the output in result
or on the terminal?

For instance, an error could be like this here:

No package ‘gtk±3.0’ found

I could grep the whole string for something like that.

But perhaps there is another way? An error result that is
set and which I could use in Ruby?

Any pointers appreciated!

I suggest to look at popen and variants which give you more control
about the child process

http://rdoc.info/stdlib/core/1.9.2/IO#popen-class_method
http://rdoc.info/stdlib/open3/1.9.2/Open3#popen3-instance_method

Kind regards

robert

Robert K. wrote in post #1026400:

On Thu, Oct 13, 2011 at 8:22 AM, Marc H. [email protected]
wrote:

Question 1:

I don’t seem to get the output of this command, when it is done
like the above way.

What exactly do you mean by that? Do you expect the output in result
or on the terminal?

For instance, an error could be like this here:

No package ‘gtk±3.0’ found

I could grep the whole string for something like that.

But perhaps there is another way? An error result that is
set and which I could use in Ruby?

Any pointers appreciated!

I suggest to look at popen and variants which give you more control
about the child process

http://rdoc.info/stdlib/core/1.9.2/IO#popen-class_method
http://rdoc.info/stdlib/open3/1.9.2/Open3#popen3-instance_method

FWIW, I use 1.9’s open3 lib in a custom git cmd to slurp combined
stdout/stderr and get the return code

And it appears to work OK with MRI on Windows :wink:

Jon


blog: http://jonforums.github.com/
twitter: @jonforums

Most people die of a sort of creeping common sense, and discover when it
is too late that the only things one never regrets are one’s mistakes.
- Oscar Wilde