Re: subprocess.Popen inheriting
- From: Aaron Brady <castironpi@xxxxxxxxx>
- Date: Wed, 17 Dec 2008 16:46:32 -0800 (PST)
On Dec 17, 5:05 pm, "Gabriel Genellina" <gagsl-...@xxxxxxxxxxxx>
wrote:
En Wed, 17 Dec 2008 12:21:38 -0200, Jeremy Sanders
<jeremy+complangpyt...@xxxxxxxxxxxxxxxxx> escribió:
Aaron Brady wrote:
I thought so too. The web seems to say that on Linux they are, and on
Windows, you need to call DuplicateHandle for it.
Or set bInheritHandle=True when creating the pipe initially. os.pipe()
doesn't do that.
I hit this problem - it looks like pipes aren't very versatile on
Windows.
There's also the complicating factor that the handles in windows aren't
the
same as the file numbers that Python uses, so you have to convert between
them.
It would be nice if Python created pipes that are properly inheritable by
default by child processes, as they're mostly used for IPC.
I'd say it is a bug in os.pipe implementation; they should be inheritable
by default, as in posix (after all, the code is in "posixmodule.c").
The code looks like this:
ok = CreatePipe(&read, &write, NULL, 0);
Py_END_ALLOW_THREADS
if (!ok)
return win32_error("CreatePipe", NULL);
read_fd = _open_osfhandle((Py_intptr_t)read, 0);
write_fd = _open_osfhandle((Py_intptr_t)write, 1);
'If lpPipeAttributes is NULL, the handle cannot be inherited.' You
could populate a 'SECURITY_ATTRIBUTES' structure, or call
DuplicateHandle on both of them.
A patch would look like this:
SECURITY_ATTRIBUTES sattribs;
sattribs.nLength = sizeof(sattribs);
sattribs.lpSecurityDescriptor = NULL;
sattribs.bInheritHandle = TRUE;
ok = CreatePipe(&read, &write, &sattribs, 0);
This still doesn't answer whether the file descriptor return by
'_open_osfhandle' can be inherited too.
.
- Follow-Ups:
- Re: subprocess.Popen inheriting
- From: Gabriel Genellina
- Re: subprocess.Popen inheriting
- References:
- subprocess.Popen inheriting
- From: Aaron Brady
- Re: subprocess.Popen inheriting
- From: Gabriel Genellina
- Re: subprocess.Popen inheriting
- From: Aaron Brady
- Re: subprocess.Popen inheriting
- From: Jeremy Sanders
- Re: subprocess.Popen inheriting
- From: Gabriel Genellina
- subprocess.Popen inheriting
- Prev by Date: Re: C API and memory allocation
- Next by Date: Re: C API and memory allocation
- Previous by thread: Re: subprocess.Popen inheriting
- Next by thread: Re: subprocess.Popen inheriting
- Index(es):
Relevant Pages
|