<div dir="ltr">Oh, I meant to say that I think that process*/ports can make things easier than system for this kind of thing. read-string-evt is more for if you want to get good performance for high-throughput streams, which it seems like isn't an issue here. This different seems unlikely to help with whatever is going wrong.<div>
<br></div><div style>I don't see that you're closing the ports anywhere, so maybe there is something like that happening in your real script. Make sure that you close everything as soon as you know there is no more data. Otherwise, I'm just not sure what's going wrong.</div>
<div style><br></div><div style>As for process* and system*: they will work, I think, unless the strings you put in the "~a"s are multiple arguments and you can't do that parsing yourself. You'd do something like</div>
<div style><br></div><div style> (system* "/usr/bin/instruments" "-t" (path->string instruments-path) (path->string app-path) "-e" "UIASCRIPT" (path->string script-path))</div>
<div style><br></div><div style>roughly.</div><div style><br></div><div style>Robby</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 16, 2013 at 7:27 PM, Nick Shelley <span dir="ltr"><<a href="mailto:nickmshelley@gmail.com" target="_blank">nickmshelley@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>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><br></div><div>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><font face="arial, sans-serif"><br></font></div><div><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><font face="arial, sans-serif"><br></font></div><div><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><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><div class="im"><div> (define-values (in out) (make-pipe))</div><div> (define stdout (current-output-port))</div><div> (define string-port (open-output-string))</div>
</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 class="im"><div> (printf "~n~nresults: ~a~n" (get-output-string string-port))</div>
<div><br></div></div><div>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="HOEnZb"><div class="h5"><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>
</div></div><br>____________________<br>
Racket Users list:<br>
<a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>