<div dir="ltr">I scanned that file and it seems like it collects the output at the end of the process, which isn&#39;t quite what I need. Thanks for the pointer though.<div><br></div><div>I also tried closing the ports, but that didn&#39;t help.<br>

<div><br></div><div style>I&#39;ve been trying to reduce my code to a minimum working/non-working example, and it hasn&#39;t helped much. Basically I found out that every other command I tried worked fine, but the instruments one doesn&#39;t work with the copy-port stuff (it works when run by itself). For instance, I tried &quot;raco test&quot; on some personal code with the copy-port stuff and it logged in real-time just fine. I also tried &quot;brew upgrade&quot; and it logged the results in real time. But for some reason the command I&#39;m using doesn&#39;t seem to work.</div>

<div style><br></div><div style>I think I&#39;m just going to use the tee workaround for now.</div><div style><br></div><div style>Thanks for the time and pointers. I definitely learned a few things, so it wasn&#39;t a complete waste for me at least.</div>

<div style><br></div><div style>If there are any perfectionists that still want to figure this out, I&#39;m just running iOS UI Automation tests as described here:</div><div style><br></div><div style><a href="http://stackoverflow.com/questions/4191945/can-the-ui-automation-instrument-be-run-from-the-command-line">http://stackoverflow.com/questions/4191945/can-the-ui-automation-instrument-be-run-from-the-command-line</a></div>

<div style><br></div><div style>Although I doubt there are many people who&#39;ve been enlightened by Racket yet still stoop to writing Objective-C code...</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Thu, May 16, 2013 at 9:09 PM, Jay McCarthy <span dir="ltr">&lt;<a href="mailto:jay.mccarthy@gmail.com" target="_blank">jay.mccarthy@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I&#39;m showing up late to this party, but...<br>
<br>
DrDr has to do this in a very reliable way and it is abstracted into a<br>
fairly nice function called run/collect/wait<br>
<br>
<a href="https://github.com/plt/racket/blob/master/collects/meta/drdr/run-collect.rkt" target="_blank">https://github.com/plt/racket/blob/master/collects/meta/drdr/run-collect.rkt</a><br>
<br>
You may want to look at it a little.<br>
<br>
Jay<br>
<div class="HOEnZb"><div class="h5"><br>
On Thu, May 16, 2013 at 6:43 PM, Robby Findler<br>
&lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt; wrote:<br>
&gt; Oh, I meant to say that I think that process*/ports can make things easier<br>
&gt; than system for this kind of thing. read-string-evt is more for if you want<br>
&gt; to get good performance for high-throughput streams, which it seems like<br>
&gt; isn&#39;t an issue here. This different seems unlikely to help with whatever is<br>
&gt; going wrong.<br>
&gt;<br>
&gt; I don&#39;t see that you&#39;re closing the ports anywhere, so maybe there is<br>
&gt; something like that happening in your real script. Make sure that you close<br>
&gt; everything as soon as you know there is no more data. Otherwise, I&#39;m just<br>
&gt; not sure what&#39;s going wrong.<br>
&gt;<br>
&gt; As for process* and system*: they will work, I think, unless the strings you<br>
&gt; put in the &quot;~a&quot;s are multiple arguments and you can&#39;t do that parsing<br>
&gt; yourself. You&#39;d do something like<br>
&gt;<br>
&gt;   (system* &quot;/usr/bin/instruments&quot; &quot;-t&quot; (path-&gt;string instruments-path)<br>
&gt; (path-&gt;string app-path) &quot;-e&quot; &quot;UIASCRIPT&quot; (path-&gt;string script-path))<br>
&gt;<br>
&gt; roughly.<br>
&gt;<br>
&gt; Robby<br>
&gt;<br>
&gt;<br>
&gt; On Thu, May 16, 2013 at 7:27 PM, Nick Shelley &lt;<a href="mailto:nickmshelley@gmail.com">nickmshelley@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; I tried &quot;file-stream-buffer-mode&quot; on the stdout port and that didn&#39;t help.<br>
&gt;&gt; That seems to be the only port that will work with that method.<br>
&gt;&gt;<br>
&gt;&gt; I also realize I misled you when I put &quot;&lt;script-that-logs-to-console&gt;&quot; as<br>
&gt;&gt; a placeholder in the code. Really it is a command of the form (format<br>
&gt;&gt; &quot;instruments -t ~a \&quot;~a\&quot; -e UIASCRIPT ~a&quot; ...) where two of the three ~a<br>
&gt;&gt; arguments are passed to Racket through the command-line. If I understand<br>
&gt;&gt; correctly, process* and system* won&#39;t work with this form.<br>
&gt;&gt;<br>
&gt;&gt; After experimenting a bunch unsuccessfully, I tried putting the system<br>
&gt;&gt; call before I created the ports and without a parameterized<br>
&gt;&gt; current-output-port. The results I see are that for the first system call I<br>
&gt;&gt; get real-time logs to the console, then with the next one the tests repeat,<br>
&gt;&gt; but the logs don&#39;t come until the end.<br>
&gt;&gt;<br>
&gt;&gt; I even tried Neil&#39;s suggested approach in case that made a difference.<br>
&gt;&gt; Aside from the fact that it has the same buffering problem, I never get the<br>
&gt;&gt; eof event, so I don&#39;t know when to terminate the sync loop. Here&#39;s the code:<br>
&gt;&gt;<br>
&gt;&gt;   (define-values (in out) (make-pipe))<br>
&gt;&gt;   (define stdout (current-output-port))<br>
&gt;&gt;   (define string-port (open-output-string))<br>
&gt;&gt;   (process/ports out #f #f (format &quot;instruments -t ~a \&quot;~a\&quot; -e UIASCRIPT<br>
&gt;&gt; ~a&quot; instruments-path app-path script-path))<br>
&gt;&gt;   (let loop ([data (sync (read-string-evt 1 in))])<br>
&gt;&gt;     (unless (eof-object? data)<br>
&gt;&gt;       (display (format &quot;data: [~a]&quot; data) stdout)<br>
&gt;&gt;       (display data string-port)<br>
&gt;&gt;       (loop (sync (read-string-evt 1 in)))))<br>
&gt;&gt;   (printf &quot;~n~nresults: ~a~n&quot; (get-output-string string-port))<br>
&gt;&gt;<br>
&gt;&gt; With this I get the delayed logs (each letter in brackets per sync event)<br>
&gt;&gt; and then the program hangs waiting for an eof that never comes. Out of<br>
&gt;&gt; curiosity, why did both of you recommend this approach over the system<br>
&gt;&gt; approach? Either I&#39;m doing it completely wrong or I just can&#39;t see the<br>
&gt;&gt; advantage.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Thu, May 16, 2013 at 5:08 PM, Neil Van Dyke &lt;<a href="mailto:neil@neilvandyke.org">neil@neilvandyke.org</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; You can try &quot;file-stream-buffer-mode&quot; on the port.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Neil V.<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; ____________________<br>
&gt;&gt;   Racket Users list:<br>
&gt;&gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; ____________________<br>
&gt;   Racket Users list:<br>
&gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;<br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Jay McCarthy &lt;<a href="mailto:jay@cs.byu.edu">jay@cs.byu.edu</a>&gt;<br>
Assistant Professor / Brigham Young University<br>
<a href="http://faculty.cs.byu.edu/~jay" target="_blank">http://faculty.cs.byu.edu/~jay</a><br>
<br>
&quot;The glory of God is Intelligence&quot; - D&amp;C 93<br>
</font></span></blockquote></div><br></div>