Simulate `bash` behaviour using Python and named pipes.

MRAB python at mrabarnett.plus.com
Mon Aug 5 10:03:02 EDT 2013


On 05/08/2013 14:09, Luca Cerone wrote:
> Hi everybody,
> I am trying to understand how to use named pipes in python to launch external processes (in a Linux environment).
>
> As an example I am trying to "imitate" the behaviour of the following sets of commands is bash:
>
>> mkfifo named_pipe
>> ls -lah > named_pipe &
>> cat < named_pipe
>
> In Python I have tried the following commands:
>
> import os
> import subprocess as sp
>
> os.mkfifo("named_pipe",0777) #equivalent to mkfifo in bash..
> fw = open("named_pipe",'w')
> #at this point the system hangs...
>
> My idea it was to use subprocess.Popen and redirect stdout to fw...
> next open named_pipe for reading and giving it as input to cat (still using Popen).
>
> I know it is a simple (and rather stupid) example, but I can't manage to make it work..
>
>
> How would you implement such simple scenario?
>
> Thanks a lot in advance for the help!!!
>
Opening the pipe for reading will block until it's also opened for
writing, and vice versa.

In your bash code, 'ls' blocked until you ran 'cat', but because you
ran 'ls' in the background you didn't notice it!

In your Python code, the Python thread blocked on opening the pipe for
writing. It was waiting for another thread or process to open the pipe
for reading.




More information about the Python-list mailing list