On Dec 17, 7:16 pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar> wrote: > En Wed, 17 Dec 2008 22:46:32 -0200, Aaron Brady <castiro...@gmail.com> > escribió: > > > > > On Dec 17, 5:05 pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar> > > wrote: > >> En Wed, 17 Dec 2008 12:21:38 -0200, Jeremy Sanders > >> <jeremy+complangpyt...@jeremysanders.net> escribió: > > >> > 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); > > Yes, that's exactly how os.popen does it (in posixmodule.c) > > > This still doesn't answer whether the file descriptor return by > > '_open_osfhandle' can be inherited too. > > It doesn't matter. The OS only cares about file handles, not C RTL > structures.
Sorry for the multiple posts. File handles are inheritable by child processes, if the permissions are right. File descriptors are not. Is there a way that we can get the handles of a pipe into code, so that we can pass them to a subprocess? Will it take calling 'CreatePipe' from ctypes directly if on Windows? Or can 'os.pipe' be made to abstract that? If Windows can't inherit descriptors, 'os.pipe' should return handles, and 'os.read' &co. should accept them. It is a fairly large patch. -- http://mail.python.org/mailman/listinfo/python-list