<div dir="ltr">I went to do my &quot;tee&quot; workaround that I assumed would work, and I discovered that it suffers from the same issue. I then just ran the command without Racket but included the pipe to tee and none of the output is shown until the process finishes. The same thing happened when I pipe to less. There&#39;s obviously something weird going on with that process and piping or redirecting output that has nothing to do with Racket.<div>

<br></div><div style>Also, thanks for the code Neil, I&#39;ll keep that in mind when I need to do more intensive processing. My current needs are just to search the logs for the presence of a &quot;Fail:&quot; string, which indicates a failure. I know the problem is simple enough that I probably could have just piped to grep or something, but I&#39;m not very familiar or comfortable with command-line tools and bash programming, and the last time I tried to do something like this in bash, this unfamiliarity bit me a lot. Plus, I like finding opportunities to use Racket at work so I can get paid to become more familiar with a language I like using.</div>

<div style><br></div><div style>Thanks again for all the help. Sorry if my misdiagnosis of the problem wasted anyone&#39;s time.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 16, 2013 at 11:01 PM, Neil Van Dyke <span dir="ltr">&lt;<a href="mailto:neil@neilvandyke.org" target="_blank">neil@neilvandyke.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">If you change the &quot;process*&quot; call in the below program to run your command, and run this program in DrRacket with &quot;View -&gt; Show Log&quot;, hopefully you see the output from your command promptly.<br>


<br>
#lang racket/base<br>
<br>
(require racket/system)<br>
<br>
(apply (lambda (stdout-in<br>
                stdin-out<br>
                pid<br>
                stderr-in<br>
                process-proc)<br>
         (let* ((buf-size  4096)<br>
                (buf-bytes (make-bytes buf-size)))<br>
           (let loop ()<br>
             (let ((evt (sync/enable-break stdout-in stderr-in)))<br>
               ;; ...<br>
               (let ((read-result (read-bytes-avail! buf-bytes evt)))<br>
                 (cond ((eof-object? read-result)<br>
                        (log-error &quot;EOF!&quot;)<br>
                        ;; ...<br>
                        (void))<br>
                       ;; ...<br>
                       (else<br>
                        (log-error &quot;OUTPUT: ~S&quot; (subbytes buf-bytes 0 read-result))<br>
                        (loop))))))<br>
           ;; ...<br>
           (close-output-port stdin-out)<br>
           (close-input-port  stdout-in)<br>
           (close-input-port  stderr-in)))<br>
       (process* &quot;/bin/sh&quot;<br>
                 &quot;-c&quot;<br>
                 &quot;while true ; do echo -n abc ; sleep 3 ; done&quot;))<br>
<br>
(I wrote the code this particular way, using a bytes buffer, because it&#39;s a good starting point for doing fancier things, such as if you&#39;re trying to recognize particular output and handle it specially, or if you&#39;re interacting with the process.  This is as far as I can help, though.  Depending on the entirety of what you want to do with the output, getting this right can easily take hours and end up looking like systems programming.  Or you can look at doing it with first-class continuations, which should be more elegant, but continuations hurt people&#39;s brains initially, and i&#39;m not sure how performance would compare.)<br>


<br>
Neil V.<br>
<br>
</blockquote></div><br></div>