Running a program from another program.

Stephen Hansen me+list/python at ixokai.io
Thu Jun 17 16:48:21 EDT 2010


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.

-- 

   Stephen Hansen
   ... Also: Ixokai
   ... Mail: me+list/python (AT) ixokai (DOT) io
   ... Blog: http://meh.ixokai.io/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/python-list/attachments/20100617/28977c03/attachment.sig>


More information about the Python-list mailing list