How to write to a named pipe?

James Logajan JamesL at Lugoj.Com
Mon Aug 16 23:33:01 EDT 1999

singlets at wrote:
> >>> import os
> >>> os.mkfifo('/tmp/myfifo')
> >>> f=open('/tmp/myfifo','w')    # now we're stuck


f = open('/tmp/myfifo', 'w+')

(Note the extra '+')

Not sure why 'rw' doesn't work. But 'r+' also works. Here is something you
can try: in one window start a Python interpreter and do:

f = open('/tmp/myfifo', 'w')   # The usual block.

And then in the other interpreter do:

f = open('/tmp/myfifo', 'r')    # Both should now return!

You can reverse the open order and get the same result. Basically pipes are
unidirectional and expect a reader and a writer. I'm so used to opening
pipes in 'C' in read/write mode that I've forgotten why things are like
this. At least it doesn't block, once you remember to always open read/write
or similar.

More information about the Python-list mailing list