mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Implement os.waitpid() for Windows, in a way that's compatible with Linux
where their capabilities intersect. Would be nice if people using non- MSVC compilers (Borland etc) took a whack at doing something similar for them (this code relies on the MS _cwait function).
This commit is contained in:
parent
0c350bfad0
commit
ab034fab03
3 changed files with 56 additions and 8 deletions
|
@ -78,6 +78,7 @@ corresponding Unix manual entries for more information on calls.";
|
|||
#define HAVE_PIPE 1
|
||||
#define HAVE_POPEN 1
|
||||
#define HAVE_SYSTEM 1
|
||||
#define HAVE_CWAIT 1
|
||||
#else /* 16-bit Windows */
|
||||
#endif /* !MS_WIN32 */
|
||||
#else /* all other compilers */
|
||||
|
@ -3333,8 +3334,33 @@ posix_waitpid(PyObject *self, PyObject *args)
|
|||
else
|
||||
return Py_BuildValue("ii", pid, status_i);
|
||||
}
|
||||
#endif /* HAVE_WAITPID */
|
||||
|
||||
#elif defined(HAVE_CWAIT)
|
||||
|
||||
/* MS C has a variant of waitpid() that's usable for most purposes. */
|
||||
static char posix_waitpid__doc__[] =
|
||||
"waitpid(pid, options) -> (pid, status << 8)\n"
|
||||
"Wait for completion of a given process. options is ignored on Windows.";
|
||||
|
||||
static PyObject *
|
||||
posix_waitpid(PyObject *self, PyObject *args)
|
||||
{
|
||||
int pid, options;
|
||||
int status;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "ii:waitpid", &pid, &options))
|
||||
return NULL;
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
pid = _cwait(&status, pid, options);
|
||||
Py_END_ALLOW_THREADS
|
||||
if (pid == -1)
|
||||
return posix_error();
|
||||
else
|
||||
/* shift the status left a byte so this is more like the
|
||||
POSIX waitpid */
|
||||
return Py_BuildValue("ii", pid, status << 8);
|
||||
}
|
||||
#endif /* HAVE_WAITPID || HAVE_CWAIT */
|
||||
|
||||
#ifdef HAVE_WAIT
|
||||
static char posix_wait__doc__[] =
|
||||
|
@ -5678,7 +5704,7 @@ static PyMethodDef posix_methods[] = {
|
|||
#ifdef HAVE_WAIT
|
||||
{"wait", posix_wait, METH_VARARGS, posix_wait__doc__},
|
||||
#endif /* HAVE_WAIT */
|
||||
#ifdef HAVE_WAITPID
|
||||
#if defined(HAVE_WAITPID) || defined(HAVE_CWAIT)
|
||||
{"waitpid", posix_waitpid, METH_VARARGS, posix_waitpid__doc__},
|
||||
#endif /* HAVE_WAITPID */
|
||||
#ifdef HAVE_SETSID
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue