Thanks Alex, now I think I understand much better the fifo/pipe mechanism and how Python treats them.
For those who are interested, I would like to restate the problem I was tring to solve and a working solution (inspired by Alex Martelli's code), feel free to criticize it: The problem: I have an external program which takes two matrices (two text files) as input, and produces an output to stdout, you can take diff as an example. I want to call this program from within Python, without writing any temporary file (for the performance reason). In Bash, this task would be best written as: #!/bin/bash diff <(step1) <(step2) | step3 Where step1, step2 and step3 have to be independent external programs. Now in Python, since there is no exact equivalence of <() magic a.k.a. process substitution, I figured taht the best solution should be to create a pair of fifos and do something like this: #!/bin/bash mkfifo fifo1 fifo2 step1 > fifo1 & step2 > fifo2 & diff step1 step2 | step3 And a working Python equivalent code is: #!/usr/bin/python import os # do step1 and step2 in Python, say we end up with something like these: s1 = "some string\n second line." # results from step1 s2 = "some string\n a different line." # results from step2 os.mkfifo('fifo1') os.mkfifo('fifo2') op = os.popen(' '.join(['diff', 'fifo1', 'fifo2'])) # this step is crucial! print >> open('fifo1', 'w'), s1 print >> open('fifo2', 'w'), s2 os.unlink('fifo1') os.unlink('fifo2') x = op.read() # Now do something about x print x P.S.: process substitution is a Bash hack which uses /dev/fd/<n> to send (usually more than one) processes output to a program which takes (more than one) filename as input. Heuristically speaking, this is like a multiway pipe. You can find more about this mechanism here: http://www.tldp.org/LDP/abs/html/process-sub.html -- http://mail.python.org/mailman/listinfo/python-list