> From: Andrew Gaffney [mailto:[EMAIL PROTECTED] 
> Sent: Sunday, 22 February 2004 6:09 PM
> To: David le Blanc
> Cc: [EMAIL PROTECTED]
> Subject: Re: parsing Makefiles
> 
> David le Blanc wrote:
> >>I've come up with some *simple* code that seems to work:
> >>
> >>#!/usr/bin/perl
> >>
> >>use strict;
> >>use warnings;
> >>
> >>$| = 1;
> >>my $total = `make -n | wc -l`;
> >>my ($count, $line);
> >>open MAKE, "make |";
> >>foreach $line (<MAKE>) {
> >>   $count++;
> >>   my $percent = int(($count / $total) * 100);
> >>   print "..$percent";
> >>}
> > 
> > 
> > You may find that the 'MAKE' file handle is buffered by the make
> > application.
> > 
> > I order to ensure 'make' doesn't buffer its output, you 
> need to run it
> > in its
> > own pseudo-terminal.   The Expect module may be able to 
> help, since it
> > runs
> > apps in pseudo-terminals, or someone else may offer a 
> better solution.
> 
> Its not the 'make' output that's being buffered. That doesn't 
> get printed at all. Its my 
> output that does appear until the whole run is done.


Ok,  Lets break down what is really going on here.


Your  loop construct:

foreach $line (<MAKE>) {
        .. print stuff ..

}

is looping BASED ON THE OUTPUT of the make command.  

Since the MAKE COMMAND OUTPUT is being buffered by the make command,
you will find that NOTHING arrives in the 'foreach' loop until the
entire 
make has complete and FLUSHED its output.

Hence, if you want to print output as the MAKE COMMAND OUTPUT arrives,
you
must make sure the COMMAND OUTPUT arrives in a timely manner.. I.e.
unbuffered.


Thus:

> In order to ensure 'make' doesn't buffer its output, you 
> need to run it in its own pseudo-terminal.   The Expect module
> may be able to help, since it runs apps in pseudo-terminals, or
> someone else may offer a better solution.

If you are still unsure about what's going on, its probably because
english
is my second language.

assembler is my first :-) You should see what my perl code looks like.



--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to