in reply to open3 buffering in linux vs. os x

Not a *nix user here, so your mileage might vary, but there is a trick I use successfully to cause interactive programs to flush their buffers under Win32 that might work for you.

Most interactive programs have some kind of 'status' command with a regular and easily recognisable output format. The trick is to issue one or more of these when you've reached a point that you need to know that you're seeing all the output from the previous command or batch of commands.

A quick look at the ProFit docs shows that it has a 'comment' command. Any line entered that starts with '#' is simply echoed to stdout. Which is great, as it is easy for your read loop to simple discard any line that starts with '#'.

With a little investigation, you can even determine the size of the output buffer and simply do print $writeFH '#' x $bufferSize;, and know that whatever output precedes that will have been flushed through after you've issued it.

It's not exactly a cool solution, but it is easy to implement and try.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re^2: open3 buffering in linux vs. os x
by Lexicon (Chaplain) on Jan 09, 2009 at 01:13 UTC
    Heh, I was actually playing with the comment, status, and some other commands to see if they would flush the buffer automagically, but they didn't work. However, I didn't go so far as to try to overflow the buffer, but now that you mention it that might be an easy trick to pull off.

    Comes back 30 seconds later...

    The buffer is 4KB. Problem solved!

    Interesingly, only works if I unbuffer the output using fctrl.