<div dir="ltr"><div style>I tried "file-stream-buffer-mode" on the stdout port and that didn't help. That seems to be the only port that will work with that method.</div><div style><br></div><div style>I also realize I misled you when I put "<span style="font-family:arial,sans-serif;font-size:13px"><script-that-logs-to-console>" as a placeholder in the code. Really it is a command of the form </span><font face="arial, sans-serif">(format "instruments -t ~a \"~a\" -e UIASCRIPT ~a" ...) where two of the three ~a arguments are passed to Racket through the command-line. If I understand correctly, process* and system* won't work with this form.</font></div>
<div style><font face="arial, sans-serif"><br></font></div><div style><font face="arial, sans-serif">After experimenting a bunch unsuccessfully, I tried putting the system call before I created the ports and without a parameterized current-output-port. The results I see are that for the first system call I get real-time logs to the console, then with the next one the tests repeat, but the logs don't come until the end.</font></div>
<div style><font face="arial, sans-serif"><br></font></div><div style><font face="arial, sans-serif">I even tried Neil's suggested approach in case that made a difference. Aside from the fact that it has the same buffering problem, I never get the eof event, so I don't know when to terminate the sync loop. Here's the code:</font></div>
<div style><font face="arial, sans-serif"><br></font></div><div style><font face="arial, sans-serif"><div> (define-values (in out) (make-pipe))</div><div> (define stdout (current-output-port))</div><div> (define string-port (open-output-string))</div>
<div> (process/ports out #f #f (format "instruments -t ~a \"~a\" -e UIASCRIPT ~a" instruments-path app-path script-path))</div><div> (let loop ([data (sync (read-string-evt 1 in))])</div><div> (unless (eof-object? data)</div>
<div> (display (format "data: [~a]" data) stdout)</div><div> (display data string-port)</div><div> (loop (sync (read-string-evt 1 in)))))</div><div> (printf "~n~nresults: ~a~n" (get-output-string string-port))</div>
<div><br></div><div style>With this I get the delayed logs (each letter in brackets per sync event) and then the program hangs waiting for an eof that never comes. Out of curiosity, why did both of you recommend this approach over the system approach? Either I'm doing it completely wrong or I just can't see the advantage.</div>
</font></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 16, 2013 at 5:08 PM, Neil Van Dyke <span dir="ltr"><<a href="mailto:neil@neilvandyke.org" target="_blank">neil@neilvandyke.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You can try "file-stream-buffer-mode" on the port.<br>
<br>
Neil V.<br>
<br>
</blockquote></div><br></div>