Op donderdag 17-06-2010 om 13:48 uur [tijdzone -0700], schreef Stephen Hansen: > On 6/17/10 1:42 PM, Laurent Verweijen wrote: > > I tried putting what Ian Kelly said in my code, by it doesn't work for > > me. > > > > Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) > > [GCC 4.4.3] on linux2 > > Type "help", "copyright", "credits" or "license" for more information. > >>>> import os > >>>> import fcntl > >>>> import subprocess > >>>> process = subprocess.Popen(["python", "increment.py"], stdin = > > subprocess.PIPE, stdout = subprocess.PIPE) > >>>> flags = fcntl.fcntl(process.stdout, fcntl.F_GETFL) > >>>> fcntl.fcntl(process.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK) > > 0 > >>>> process.stdin.write("5\n") > >>>> process.stdout.read() > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > IOError: [Errno 11] Resource temporarily unavailable > > I *believe* that error in response to "read()" is something you should > catch: its EAGAIN. Meaning, for it to perform that operation, it would > have to block, but you've set it to not block. > > Thus, your subprocess hasn't written anything new out yet by the time > you call that. You have to try/except looking for that and catch it. > > That's why I preferred the recipe I linked to in that thread: it uses > select to only read when there's something -to- actually read. >
It just gives me an empty string. Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from asynchronous import * >>> p = Popen(["python", "increment.py"], stdin=PIPE, stdout=PIPE) >>> send_all(p, "5\n") >>> recv_some(p) '' >>> send_all(p, "6\n") >>> recv_some(p) '' -- http://mail.python.org/mailman/listinfo/python-list