Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: Handling program output in real time

by hmerrill (Friar)
on Nov 10, 2003 at 14:29 UTC ( [id://305874]=note: print w/replies, xml ) Need Help??


in reply to Handling program output in real time

Here is *maybe* another way to get what you want - not really sure about this, but here it is. How about having blackbox.pl write to a fifo (named pipe), and then having the script above read from the fifo? All you need to do is:
1. create the fifo using 'mkfifo', and make sure blackbox.pl has write permissions to it. 2. change blackbox.pl to write to the fifo file, instead of writing to STDOUT. 3. change your script above to read from the fifo file instead of from PIPE1, like this my $fifo_file = "/path/to/my_fifo"; open FIFO, "<$fifo_file" or die "Can't read $fifo_file: $!"; while (<FIFO>) { # ...Filter and munge $_ print $_; }

You'll have to play with this a little to get it to work the way you want, but basically written this way, this script(reading from FIFO) will block on the while (<FIFO>) until something is written to the fifo file.

Just for some more reference, the Perl Cookbook pages 576-580 has a recipe for working with a fifo. Also, Programming Perl 3rd Edition p.433 describes Named Pipes.

HTH.

Replies are listed 'Best First'.
Re: Re: Handling program output in real time
by etcshadow (Priest) on Nov 10, 2003 at 19:56 UTC
    This doesn't really address his issue, though, as writing to a FIFO is going to have the exact same buffering behavior (line based or block based) as writing to a pipe would.

    Basically, as other users mentioned, perl internally does something along the lines of (psuedo-code):

    if (-t STDOUT) { line_buffer STDOUT; } else { block_buffer STDOUT; }
    Not that FIFOs aren't useful, they just don't have anything to do with this particular problem. If, for example, he had no control over the output of this "blackbox" and it wanted to write to a named file... well then a FIFO would be really useful, because he could replace the named file with a named pipe (FIFO), and all would be cool. Here, though, the guy's already got an anonymous pipe... so swapping it with a named-pipe isn't gonna really change anything.

    ------------
    :Wq
    Not an editor command: Wq

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://305874]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (1)
As of 2024-04-25 04:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found