Created on 2007-09-11 18:03 by luis@luispedro.org, last changed 2007-09-18 04:14 by jafo. This issue is now closed.
| Messages (2) | |||
|---|---|---|---|
| msg55829 - (view) | Author: Luís Pedro Coelho (luis@luispedro.org) | Date: 2007-09-11 18:03 | |
from os import *
def Fork():
b = fork()
if b < 0:
raise Exception('fork() failed')
return b
r,w=pipe()
b = Fork()
if b == 0:
dup2(w,1)
close(w)
execlp('echo',\
'echo',\
'Hello world')
else:
for line in fdopen(r):
print 'Read %s' % line
I was expecting this code to print "Read Hello World". Instead, it
hangs forever.
Changing "for line in fdopen(r): print 'Read %s' % line"
to "line=read(r,100); print 'Read %s' % line" makes the program work
as expected. This is what I did on my actual production code, but it
seems funny behaviour on the part of fdopen.
I am running on Ubuntu on PowerPC.
|
|||
| msg55987 - (view) | Author: Sean Reifschneider (jafo) * ![]() |
Date: 2007-09-18 04:14 | |
I do not believe this is a Python problem but instead a problem with your code. I believe the problem is likely that you still have a copy of the stdout is open, the fork that is reading also gets associated with that same file. I can't point you at any specific references, but you should check Posix references or possibly other sources for more information about side-effects such as this. These interactions, I have found, can be pretty subtle, so you may need to spend some time on getting everything right. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2007-09-18 04:14:58 | jafo | set | status: open -> closed resolution: invalid messages: + msg55987 nosy: + jafo |
| 2007-09-11 18:03:46 | luis@luispedro.org | create | |