Dialog with a process via subprocess.Popen blocks forever

Hendrik van Rooyen mail at microcorp.co.za
Fri Mar 2 00:23:43 EST 2007


 <bayer.justin at googlemail.com> wrote:



> Hi,
> 
> Thanks for your answer. I had a look into the fcntl module and tried
> to unlock the output-file, but
> 
> >>> fcntl.lockf(x.stdout, fcntl.LOCK_UN)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> IOError: [Errno 9] Bad file descriptor
> 
> I wonder why it does work with the sys.stdin It's really a pity, it's
> the first time python does not work as expected. =/
> 
> Flushing the stdin did not help, too.

its block, not lock, and one uses file.flush() after using file.write(),
so the stdin is the wrong side - you have to push, you can't pull.. 

Here is the unblock function I use  - it comes from the internet,
possibly from this group, but I have forgotten who wrote it.

# Some magic to make a file non blocking - from the internet

def unblock(f):
    """Given file 'f', sets its unblock flag to true."""

    fcntl.fcntl(f.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)

hope this helps - note that the f is not the file's name but the
thing you get when you write :

f = open(...

- Hendrik




More information about the Python-list mailing list