<div dir="ltr"><div class="markdown-here-wrapper" style><p style="margin:1.2em 0px!important">You don’t need to read the whole output at once. You can get one line at a time. Or, you can use <a href="http://pexpect.readthedocs.org/en/latest/">pexpect</a> to create the subprocess, which offers nice timeout, pattern-expecting waiting for output. Depending on context, IPython will use one or the other of these for <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:nowrap;border:1px solid rgb(234,234,234);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline;background-color:rgb(248,248,248)">!</code>.</p><p style="margin:1.2em 0px!important">-MinRK</p>
<div title="MDH:WW91IGRvbid0IG5lZWQgdG8gcmVhZCB0aGUgd2hvbGUgb3V0cHV0IGF0IG9uY2UuIFlvdSBjYW4g
Z2V0IG9uZSBsaW5lIGF0IGEgdGltZS4gT3IsIHlvdSBjYW4gdXNlIFtwZXhwZWN0XShodHRwOi8v
cGV4cGVjdC5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0LykgdG8gY3JlYXRlIHRoZSBzdWJwcm9j
ZXNzLCB3aGljaCBvZmZlcnMgbmljZSB0aW1lb3V0LCBwYXR0ZXJuLWV4cGVjdGluZyB3YWl0aW5n
IGZvciBvdXRwdXQuIERlcGVuZGluZyBvbiBjb250ZXh0LCBJUHl0aG9uIHdpbGwgdXNlIG9uZSBv
ciB0aGUgb3RoZXIgb2YgdGhlc2UgZm9yIGAhYC4=" style="height:0;font-size:0em;padding:0;margin:0">​</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 3, 2014 at 11:22 AM, Andy Davidson <span dir="ltr"><<a href="mailto:Andy@santacruzintegration.com" target="_blank">Andy@santacruzintegration.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif"><div>Hi MinRK</div><div><br></div><div>I am new to Python system programming. In my first experiments I use subprocess. Reading the document it appears subprocess it great for a setting up traditional unix style pipe like for example calling “ls”</div><div><br></div><div>In the notebook I aussem </div><div>! Uname –a</div><div><br></div><div>Works using subprocess. </div><div><br></div><div>The subprocess  documentation suggests that you need to call communicate() and that this function will not return until the child sends EOF or terminates. My child will never exit or send EOF. it will keep sending me real time data. I want to process the data one line at a time. Here is my psudo code</div><div><br></div><div>While (True):</div><div><span style="white-space:pre-wrap">        </span>Data = readALineFromChild() # this should block until data becomes available</div><div><span style="white-space:pre-wrap">     </span>Graph(data)</div><div><br></div><div><br></div><div><br></div><div>Thanks</div><div><br></div><div>Andy</div><div><br></div><div><br></div><span><blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5"><div><div><div><br></div><div>-------------- next part --------------</div><div>An HTML attachment was scrubbed...</div><div>URL: <a href="http://mail.scipy.org/pipermail/ipython-dev/attachments/20141002/aefaa3fc/attachment-0001.html" target="_blank">http://mail.scipy.org/pipermail/ipython-dev/attachments/20141002/aefaa3fc/attachment-0001.html</a> </div><div><br></div><div>------------------------------</div><div><br></div><div>Message: 3</div><div>Date: Thu, 2 Oct 2014 17:19:18 -0700</div><div>From: MinRK <<a href="mailto:benjaminrk@gmail.com" target="_blank">benjaminrk@gmail.com</a>></div><div>Subject: Re: [IPython-dev] ERROR can not use fork(), exec(), dup2() to</div><div><span style="white-space:pre-wrap">      </span>communicate with child process</div><div>To: IPython developers list <<a href="mailto:ipython-dev@scipy.org" target="_blank">ipython-dev@scipy.org</a>></div><div>Message-ID:</div><div><span style="white-space:pre-wrap">      </span><<a href="mailto:CAHNn8BXxCej6VL4XkjguOSXtgnxpsNCJXHhKGNLSBoYbiu48-g@mail.gmail.com" target="_blank">CAHNn8BXxCej6VL4XkjguOSXtgnxpsNCJXHhKGNLSBoYbiu48-g@mail.gmail.com</a>></div><div>Content-Type: text/plain; charset="utf-8"</div><div><div class="h5"><div><br></div><div>why use execlp instead of subprocess.Popen, which allows capturing stdout,</div><div>stderr, etc.?</div><div>?</div><div><br></div><div>On Thu, Oct 2, 2014 at 4:17 PM, Andy Davidson <<a href="mailto:Andy@santacruzintegration.com" target="_blank">Andy@santacruzintegration.com</a></div><blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5"><div> wrote:</div></blockquote><div><br></div><blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5"><div> Hi</div><div><br></div><div><br></div><div> I want to write a notebook that receives data from another process. Bellow</div><div> is my python code. It forks a child process and reads the data from the</div><div> child using a pipe. This code works if I run it in python. When I try to</div><div> execute from iPython notebook I get the following error. Any idea what the</div><div> problems is ?</div><div><br></div><div><br></div><div> If pipes do not work, can I use a socket? The other process would send me</div><div> data by writing, my notebook needs behave like a server.</div><div><br></div><div><br></div><div> Any comments or suggestions would be greatly appreciated.</div><div><br></div><div><br></div><div> Thanks</div><div><br></div><div><br></div><div> Andy</div><div><br></div><div><br></div><div> P.s. I am running headless on a remote machine and use an ssh tunnel to</div><div> run the notebook from my local browser. My other notebooks works fine</div><div><br></div><div><br></div><div><br></div><div> [ec2-user@ip-172-31-14-107 ~]$ IPYTHON_OPTS="notebook --pylab inline</div><div> --no-browser --port=7000" /root/spark/bin/pyspark</div><div><br></div><div> /root/spark/conf/spark-env.sh: line 21: ulimit: open files: cannot modify</div><div> limit: Operation not permitted</div><div><br></div><div> [NotebookApp] Using existing profile dir:</div><div> u'/home/ec2-user/.ipython/profile_default'</div><div><br></div><div> [NotebookApp] Serving notebooks from /home/ec2-user</div><div><br></div><div> [NotebookApp] The IPython Notebook is running at: <a href="http://127.0.0.1:7000/" target="_blank">http://127.0.0.1:7000/</a></div><div><br></div><div> [NotebookApp] Use Control-C to stop this server and shut down all kernels.</div><div><br></div><div> [NotebookApp] Using MathJax from CDN:</div><div> <a href="http://cdn.mathjax.org/mathjax/latest/MathJax.js" target="_blank">http://cdn.mathjax.org/mathjax/latest/MathJax.js</a></div><div><br></div><div> [NotebookApp] Kernel started: 71f07d5c-2db1-465f-9d86-da29f8711a0b</div><div><br></div><div> [NotebookApp] Connecting to: tcp://<a href="http://127.0.0.1:54119" target="_blank">127.0.0.1:54119</a></div><div><br></div><div> [NotebookApp] Connecting to: tcp://<a href="http://127.0.0.1:50649" target="_blank">127.0.0.1:50649</a></div><div><br></div><div> [NotebookApp] Connecting to: tcp://<a href="http://127.0.0.1:35516" target="_blank">127.0.0.1:35516</a></div><div><br></div><div> [IPKernelApp] To connect another client to this kernel, use:</div><div><br></div><div> [IPKernelApp] --existing kernel-71f07d5c-2db1-465f-9d86-da29f8711a0b.json</div><div><br></div><div> Assertion failed: ok (bundled/zeromq/src/mailbox.cpp:79)</div><div><br></div><div> [NotebookApp] Kernel 71f07d5c-2db1-465f-9d86-da29f8711a0b failed to</div><div> respond to heartbeat</div><div><br></div><div><br></div><div><br></div><div> import sys</div><div> import os</div><div><br></div><div> def child(pipeout):</div><div>     os.dup2(pipeout, sys.stdout.fileno())</div><div>     os.close(pipeout)</div><div>     os.execlp("./test.sh", "abc")</div><div><br></div><div><br></div><div> def parent():</div><div>     pipein, pipeout = os.pipe()</div><div>     if os.fork() == 0:</div><div>         os.close(pipein)</div><div>         child(pipeout)</div><div>     else:</div><div>         os.close(pipeout)</div><div>         counter = 1</div><div>         pipein = os.fdopen(pipein)</div><div>         while True:</div><div>             json = pipein.readline()[:-1]</div><div>             print 'parent: %s' % (json)</div><div><br></div><div> parent()</div><div><br></div><div> $ cat test.sh</div><div><br></div><div> #!/bin/bash</div><div><br></div><div><br></div><div> script_name=$0</div><div><br></div><div> args=$@</div><div><br></div><div> current=`pwd`</div><div><br></div><div> echo $script_name $args</div><div><br></div><div> echo "XYZ: "$XYZ</div><div><br></div><div> echo "PATH: "$PATH</div><div><br></div><div> echo "current directory: $current"</div><div><br></div><div><br></div><div> _______________________________________________</div><div> IPython-dev mailing list</div><div> <a href="mailto:IPython-dev@scipy.org" target="_blank">IPython-dev@scipy.org</a></div><div> <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a></div><div><br></div><div><br></div></blockquote></div></div></div></div></blockquote></span></div>
<br>_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
<br></blockquote></div><br></div>