annotate PC/_subprocess.c @ 48416:fb02fedfe647

Merged revisions 64677 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r64677 | brett.cannon | 2008-07-02 14:52:42 -0700 (Wed, 02 Jul 2008) | 2 lines Revert r64673 and instead just change the file encoding. ........
author Brett Cannon <bcannon@gmail.com>
date Wed, 02 Jul 2008 22:06:12 +0000
parents 7e56016a6565
children b51cd5d3795c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
1 /*
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
2 * support routines for subprocess module
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
3 *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
4 * Currently, this extension module is only required when using the
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
5 * subprocess module on Windows, but in the future, stubs for other
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
6 * platforms might be added here as well.
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
7 *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
8 * Copyright (c) 2004 by Fredrik Lundh <fredrik@pythonware.com>
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
9 * Copyright (c) 2004 by Secret Labs AB, http://www.pythonware.com
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
10 * Copyright (c) 2004 by Peter Astrand <astrand@lysator.liu.se>
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
11 *
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
12 * By obtaining, using, and/or copying this software and/or its
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
13 * associated documentation, you agree that you have read, understood,
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
14 * and will comply with the following terms and conditions:
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
15 *
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
16 * Permission to use, copy, modify, and distribute this software and
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
17 * its associated documentation for any purpose and without fee is
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
18 * hereby granted, provided that the above copyright notice appears in
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
19 * all copies, and that both that copyright notice and this permission
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
20 * notice appear in supporting documentation, and that the name of the
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
21 * authors not be used in advertising or publicity pertaining to
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
22 * distribution of the software without specific, written prior
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
23 * permission.
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
24 *
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
25 * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
26 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
27 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
28 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
29 * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
30 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
31 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
32 *
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
33 */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
34
36030
f0a5330f2b3e added PSF licensing blurbs to relevant files
Fredrik Lundh <fredrik@pythonware.com>
parents: 35856
diff changeset
35 /* Licensed to PSF under a Contributor Agreement. */
f0a5330f2b3e added PSF licensing blurbs to relevant files
Fredrik Lundh <fredrik@pythonware.com>
parents: 35856
diff changeset
36 /* See http://www.python.org/2.4/license for licensing details. */
f0a5330f2b3e added PSF licensing blurbs to relevant files
Fredrik Lundh <fredrik@pythonware.com>
parents: 35856
diff changeset
37
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
38 #include "Python.h"
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
39
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
40 #define WINDOWS_LEAN_AND_MEAN
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
41 #include "windows.h"
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
42
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
43 /* -------------------------------------------------------------------- */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
44 /* handle wrapper. note that this library uses integers when passing
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
45 handles to a function, and handle wrappers when returning handles.
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
46 the wrapper is used to provide Detach and Close methods */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
47
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
48 typedef struct {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
49 PyObject_HEAD
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
50 HANDLE handle;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
51 } sp_handle_object;
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
52
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
53 static PyTypeObject sp_handle_type;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
54
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
55 static PyObject*
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
56 sp_handle_new(HANDLE handle)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
57 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
58 sp_handle_object* self;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
59
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
60 self = PyObject_NEW(sp_handle_object, &sp_handle_type);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
61 if (self == NULL)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
62 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
63
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
64 self->handle = handle;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
65
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
66 return (PyObject*) self;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
67 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
68
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
69 static PyObject*
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
70 sp_handle_detach(sp_handle_object* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
71 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
72 HANDLE handle;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
73
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
74 if (! PyArg_ParseTuple(args, ":Detach"))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
75 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
76
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
77 handle = self->handle;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
78
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
79 self->handle = NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
80
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
81 /* note: return the current handle, as an integer */
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
82 return PyLong_FromLong((long) handle);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
83 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
84
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
85 static PyObject*
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
86 sp_handle_close(sp_handle_object* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
87 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
88 if (! PyArg_ParseTuple(args, ":Close"))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
89 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
90
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
91 if (self->handle != INVALID_HANDLE_VALUE) {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
92 CloseHandle(self->handle);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
93 self->handle = INVALID_HANDLE_VALUE;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
94 }
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
95 Py_INCREF(Py_None);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
96 return Py_None;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
97 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
98
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
99 static void
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
100 sp_handle_dealloc(sp_handle_object* self)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
101 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
102 if (self->handle != INVALID_HANDLE_VALUE)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
103 CloseHandle(self->handle);
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37144
diff changeset
104 PyObject_FREE(self);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
105 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
106
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
107 static PyMethodDef sp_handle_methods[] = {
38669
19fd6141940d Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
108 {"Detach", (PyCFunction) sp_handle_detach, METH_VARARGS},
19fd6141940d Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
109 {"Close", (PyCFunction) sp_handle_close, METH_VARARGS},
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
110 {NULL, NULL}
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
111 };
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
112
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
113 static PyObject*
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
114 sp_handle_as_int(sp_handle_object* self)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
115 {
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
116 return PyLong_FromLong((long) self->handle);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
117 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
118
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
119 static PyNumberMethods sp_handle_as_number;
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
120
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
121 static PyTypeObject sp_handle_type = {
42338
7bfe9a107b29 Merged revisions 56483-56491 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 38673
diff changeset
122 PyVarObject_HEAD_INIT(NULL, 0)
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
123 "_subprocess_handle", sizeof(sp_handle_object), 0,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
124 (destructor) sp_handle_dealloc, /*tp_dealloc*/
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
125 0, /*tp_print*/
48413
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
126 0, /*tp_getattr*/
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
127 0, /*tp_setattr*/
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
128 0, /*tp_compare*/
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
129 0, /*tp_repr*/
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
130 &sp_handle_as_number, /*tp_as_number */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
131 0, /*tp_as_sequence */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
132 0, /*tp_as_mapping */
48413
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
133 0, /*tp_hash*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
134 0, /*tp_call*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
135 0, /*tp_str*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
136 0, /*tp_getattro*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
137 0, /*tp_setattro*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
138 0, /*tp_as_buffer*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
139 Py_TPFLAGS_DEFAULT, /*tp_flags*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
140 0, /*tp_doc*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
141 0, /*tp_traverse*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
142 0, /*tp_clear*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
143 0, /*tp_richcompare*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
144 0, /*tp_weaklistoffset*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
145 0, /*tp_iter*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
146 0, /*tp_iternext*/
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
147 sp_handle_methods, /*tp_methods*/
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
148 };
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
149
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
150 /* -------------------------------------------------------------------- */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
151 /* windows API functions */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
152
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
153 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
154 sp_GetStdHandle(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
155 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
156 HANDLE handle;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
157 int std_handle;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
158
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
159 if (! PyArg_ParseTuple(args, "i:GetStdHandle", &std_handle))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
160 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
161
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
162 Py_BEGIN_ALLOW_THREADS
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
163 handle = GetStdHandle((DWORD) std_handle);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
164 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
165
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
166 if (handle == INVALID_HANDLE_VALUE)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
167 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
168
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
169 if (! handle) {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
170 Py_INCREF(Py_None);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
171 return Py_None;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
172 }
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
173
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
174 /* note: returns integer, not handle object */
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
175 return PyLong_FromLong((long) handle);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
176 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
177
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
178 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
179 sp_GetCurrentProcess(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
180 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
181 if (! PyArg_ParseTuple(args, ":GetCurrentProcess"))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
182 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
183
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
184 return sp_handle_new(GetCurrentProcess());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
185 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
186
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
187 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
188 sp_DuplicateHandle(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
189 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
190 HANDLE target_handle;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
191 BOOL result;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
192
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
193 long source_process_handle;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
194 long source_handle;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
195 long target_process_handle;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
196 int desired_access;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
197 int inherit_handle;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
198 int options = 0;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
199
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
200 if (! PyArg_ParseTuple(args, "lllii|i:DuplicateHandle",
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
201 &source_process_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
202 &source_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
203 &target_process_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
204 &desired_access,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
205 &inherit_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
206 &options))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
207 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
208
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
209 Py_BEGIN_ALLOW_THREADS
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
210 result = DuplicateHandle(
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
211 (HANDLE) source_process_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
212 (HANDLE) source_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
213 (HANDLE) target_process_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
214 &target_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
215 desired_access,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
216 inherit_handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
217 options
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
218 );
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
219 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
220
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
221 if (! result)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
222 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
223
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
224 return sp_handle_new(target_handle);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
225 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
226
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
227 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
228 sp_CreatePipe(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
229 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
230 HANDLE read_pipe;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
231 HANDLE write_pipe;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
232 BOOL result;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
233
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
234 PyObject* pipe_attributes; /* ignored */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
235 int size;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
236
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
237 if (! PyArg_ParseTuple(args, "Oi:CreatePipe", &pipe_attributes, &size))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
238 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
239
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
240 Py_BEGIN_ALLOW_THREADS
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
241 result = CreatePipe(&read_pipe, &write_pipe, NULL, size);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
242 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
243
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
244 if (! result)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
245 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
246
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
247 return Py_BuildValue(
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
248 "NN", sp_handle_new(read_pipe), sp_handle_new(write_pipe));
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
249 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
250
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
251 /* helpers for createprocess */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
252
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
253 static int
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
254 getint(PyObject* obj, char* name)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
255 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
256 PyObject* value;
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
257 int ret;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
258
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
259 value = PyObject_GetAttrString(obj, name);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
260 if (! value) {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
261 PyErr_Clear(); /* FIXME: propagate error? */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
262 return 0;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
263 }
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
264 ret = (int) PyLong_AsLong(value);
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
265 Py_DECREF(value);
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
266 return ret;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
267 }
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
268
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
269 static HANDLE
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
270 gethandle(PyObject* obj, char* name)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
271 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
272 sp_handle_object* value;
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
273 HANDLE ret;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
274
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
275 value = (sp_handle_object*) PyObject_GetAttrString(obj, name);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
276 if (! value) {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
277 PyErr_Clear(); /* FIXME: propagate error? */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
278 return NULL;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
279 }
44351
86a2679dca46 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents: 44099
diff changeset
280 if (Py_TYPE(value) != &sp_handle_type)
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
281 ret = NULL;
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
282 else
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
283 ret = value->handle;
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
284 Py_DECREF(value);
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
285 return ret;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
286 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
287
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
288 static PyObject*
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
289 getenvironment(PyObject* environment)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
290 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
291 int i, envsize;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
292 PyObject* out = NULL;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
293 PyObject* keys;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
294 PyObject* values;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
295 Py_UNICODE* p;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
296
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
297 /* convert environment dictionary to windows enviroment string */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
298 if (! PyMapping_Check(environment)) {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
299 PyErr_SetString(
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
300 PyExc_TypeError, "environment must be dictionary or None");
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
301 return NULL;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
302 }
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
303
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
304 envsize = PyMapping_Length(environment);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
305
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
306 keys = PyMapping_Keys(environment);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
307 values = PyMapping_Values(environment);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
308 if (!keys || !values)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
309 goto error;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
310
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
311 out = PyUnicode_FromUnicode(NULL, 2048);
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
312 if (! out)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
313 goto error;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
314
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
315 p = PyUnicode_AS_UNICODE(out);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
316
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
317 for (i = 0; i < envsize; i++) {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
318 int ksize, vsize, totalsize;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
319 PyObject* key = PyList_GET_ITEM(keys, i);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
320 PyObject* value = PyList_GET_ITEM(values, i);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
321
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
322 if (! PyUnicode_Check(key) || ! PyUnicode_Check(value)) {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
323 PyErr_SetString(PyExc_TypeError,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
324 "environment can only contain strings");
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
325 goto error;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
326 }
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
327 ksize = PyUnicode_GET_SIZE(key);
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
328 vsize = PyUnicode_GET_SIZE(value);
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
329 totalsize = (p - PyUnicode_AS_UNICODE(out)) + ksize + 1 +
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
330 vsize + 1 + 1;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
331 if (totalsize > PyUnicode_GET_SIZE(out)) {
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
332 int offset = p - PyUnicode_AS_UNICODE(out);
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
333 PyUnicode_Resize(&out, totalsize + 1024);
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
334 p = PyUnicode_AS_UNICODE(out) + offset;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
335 }
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
336 Py_UNICODE_COPY(p, PyUnicode_AS_UNICODE(key), ksize);
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
337 p += ksize;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
338 *p++ = '=';
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
339 Py_UNICODE_COPY(p, PyUnicode_AS_UNICODE(value), vsize);
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
340 p += vsize;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
341 *p++ = '\0';
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
342 }
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
343
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
344 /* add trailing null byte */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
345 *p++ = '\0';
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
346 PyUnicode_Resize(&out, p - PyUnicode_AS_UNICODE(out));
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
347
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
348 /* PyObject_Print(out, stdout, 0); */
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
349
35855
429f537cf6d6 r849@spiff: Fredrik | 2005-11-09 10:00:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33929
diff changeset
350 Py_XDECREF(keys);
429f537cf6d6 r849@spiff: Fredrik | 2005-11-09 10:00:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33929
diff changeset
351 Py_XDECREF(values);
429f537cf6d6 r849@spiff: Fredrik | 2005-11-09 10:00:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33929
diff changeset
352
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
353 return out;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
354
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
355 error:
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
356 Py_XDECREF(out);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
357 Py_XDECREF(keys);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
358 Py_XDECREF(values);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
359 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
360 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
361
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
362 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
363 sp_CreateProcess(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
364 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
365 BOOL result;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
366 PROCESS_INFORMATION pi;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
367 STARTUPINFOW si;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
368 PyObject* environment;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
369
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
370 Py_UNICODE* application_name;
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
371 Py_UNICODE* command_line;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
372 PyObject* process_attributes; /* ignored */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
373 PyObject* thread_attributes; /* ignored */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
374 int inherit_handles;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
375 int creation_flags;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
376 PyObject* env_mapping;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
377 Py_UNICODE* current_directory;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
378 PyObject* startup_info;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
379
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
380 if (! PyArg_ParseTuple(args, "ZZOOiiOZO:CreateProcess",
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
381 &application_name,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
382 &command_line,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
383 &process_attributes,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
384 &thread_attributes,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
385 &inherit_handles,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
386 &creation_flags,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
387 &env_mapping,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
388 &current_directory,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
389 &startup_info))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
390 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
391
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
392 ZeroMemory(&si, sizeof(si));
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
393 si.cb = sizeof(si);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
394
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
395 /* note: we only support a small subset of all SI attributes */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
396 si.dwFlags = getint(startup_info, "dwFlags");
33929
66223a9ebe48 When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents: 33729
diff changeset
397 si.wShowWindow = getint(startup_info, "wShowWindow");
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
398 si.hStdInput = gethandle(startup_info, "hStdInput");
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
399 si.hStdOutput = gethandle(startup_info, "hStdOutput");
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
400 si.hStdError = gethandle(startup_info, "hStdError");
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
401
35856
4462871a6dce r858@spiff: Fredrik | 2005-11-10 23:40:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 35855
diff changeset
402 if (PyErr_Occurred())
4462871a6dce r858@spiff: Fredrik | 2005-11-10 23:40:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 35855
diff changeset
403 return NULL;
4462871a6dce r858@spiff: Fredrik | 2005-11-10 23:40:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 35855
diff changeset
404
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
405 if (env_mapping == Py_None)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
406 environment = NULL;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
407 else {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
408 environment = getenvironment(env_mapping);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
409 if (! environment)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
410 return NULL;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
411 }
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
412
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
413 Py_BEGIN_ALLOW_THREADS
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
414 result = CreateProcessW(application_name,
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
415 command_line,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
416 NULL,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
417 NULL,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
418 inherit_handles,
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
419 creation_flags | CREATE_UNICODE_ENVIRONMENT,
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
420 environment ? PyUnicode_AS_UNICODE(environment) : NULL,
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
421 current_directory,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
422 &si,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
423 &pi);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
424 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
425
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
426 Py_XDECREF(environment);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
427
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
428 if (! result)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
429 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
430
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
431 return Py_BuildValue("NNii",
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
432 sp_handle_new(pi.hProcess),
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
433 sp_handle_new(pi.hThread),
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
434 pi.dwProcessId,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
435 pi.dwThreadId);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
436 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
437
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
438 static PyObject *
36086
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
439 sp_TerminateProcess(PyObject* self, PyObject* args)
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
440 {
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
441 BOOL result;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
442
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
443 long process;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
444 int exit_code;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
445 if (! PyArg_ParseTuple(args, "li:TerminateProcess", &process,
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
446 &exit_code))
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
447 return NULL;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
448
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
449 result = TerminateProcess((HANDLE) process, exit_code);
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
450
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
451 if (! result)
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
452 return PyErr_SetFromWindowsErr(GetLastError());
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
453
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
454 Py_INCREF(Py_None);
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
455 return Py_None;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
456 }
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
457
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
458 static PyObject *
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
459 sp_GetExitCodeProcess(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
460 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
461 DWORD exit_code;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
462 BOOL result;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
463
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
464 long process;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
465 if (! PyArg_ParseTuple(args, "l:GetExitCodeProcess", &process))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
466 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
467
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
468 result = GetExitCodeProcess((HANDLE) process, &exit_code);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
469
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
470 if (! result)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
471 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
472
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
473 return PyLong_FromLong(exit_code);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
474 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
475
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
476 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
477 sp_WaitForSingleObject(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
478 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
479 DWORD result;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
480
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
481 long handle;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
482 int milliseconds;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
483 if (! PyArg_ParseTuple(args, "li:WaitForSingleObject",
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
484 &handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
485 &milliseconds))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
486 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
487
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
488 Py_BEGIN_ALLOW_THREADS
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
489 result = WaitForSingleObject((HANDLE) handle, (DWORD) milliseconds);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
490 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
491
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
492 if (result == WAIT_FAILED)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
493 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
494
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
495 return PyLong_FromLong((int) result);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
496 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
497
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
498 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
499 sp_GetVersion(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
500 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
501 if (! PyArg_ParseTuple(args, ":GetVersion"))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
502 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
503
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
504 return PyLong_FromLong((int) GetVersion());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
505 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
506
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
507 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
508 sp_GetModuleFileName(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
509 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
510 BOOL result;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
511 long module;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
512 WCHAR filename[MAX_PATH];
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
513
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
514 if (! PyArg_ParseTuple(args, "l:GetModuleFileName", &module))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
515 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
516
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
517 result = GetModuleFileNameW((HMODULE)module, filename, MAX_PATH);
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
518 filename[MAX_PATH-1] = '\0';
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
519
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
520 if (! result)
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
521 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
522
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
523 return PyUnicode_FromUnicode(filename, Py_UNICODE_strlen(filename));
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
524 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
525
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
526 static PyMethodDef sp_functions[] = {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
527 {"GetStdHandle", sp_GetStdHandle, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
528 {"GetCurrentProcess", sp_GetCurrentProcess, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
529 {"DuplicateHandle", sp_DuplicateHandle, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
530 {"CreatePipe", sp_CreatePipe, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
531 {"CreateProcess", sp_CreateProcess, METH_VARARGS},
36086
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
532 {"TerminateProcess", sp_TerminateProcess, METH_VARARGS},
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
533 {"GetExitCodeProcess", sp_GetExitCodeProcess, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
534 {"WaitForSingleObject", sp_WaitForSingleObject, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
535 {"GetVersion", sp_GetVersion, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
536 {"GetModuleFileName", sp_GetModuleFileName, METH_VARARGS},
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
537 {NULL, NULL}
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
538 };
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
539
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
540 /* -------------------------------------------------------------------- */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
541
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
542 static void
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
543 defint(PyObject* d, const char* name, int value)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
544 {
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 42997
diff changeset
545 PyObject* v = PyLong_FromLong((long) value);
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
546 if (v) {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
547 PyDict_SetItemString(d, (char*) name, v);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
548 Py_DECREF(v);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
549 }
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
550 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
551
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
552 static struct PyModuleDef _subprocessmodule = {
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
553 PyModuleDef_HEAD_INIT,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
554 "_subprocess",
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
555 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
556 -1,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
557 sp_functions,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
558 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
559 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
560 NULL,
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
561 NULL
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
562 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
563
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
564 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
565 PyInit__subprocess()
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
566 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
567 PyObject *d;
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
568 PyObject *m;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
569
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
570 /* patch up object descriptors */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
571 sp_handle_as_number.nb_int = (unaryfunc) sp_handle_as_int;
48413
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
572 if (PyType_Ready(&sp_handle_type) < 0)
7e56016a6565 #3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47580
diff changeset
573 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
574
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
575 m = PyModule_Create(&_subprocessmodule);
36324
1af7f719ed28 Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36086
diff changeset
576 if (m == NULL)
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
577 return NULL;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
578 d = PyModule_GetDict(m);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
579
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
580 /* constants */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
581 defint(d, "STD_INPUT_HANDLE", STD_INPUT_HANDLE);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
582 defint(d, "STD_OUTPUT_HANDLE", STD_OUTPUT_HANDLE);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
583 defint(d, "STD_ERROR_HANDLE", STD_ERROR_HANDLE);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
584 defint(d, "DUPLICATE_SAME_ACCESS", DUPLICATE_SAME_ACCESS);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
585 defint(d, "STARTF_USESTDHANDLES", STARTF_USESTDHANDLES);
33929
66223a9ebe48 When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents: 33729
diff changeset
586 defint(d, "STARTF_USESHOWWINDOW", STARTF_USESHOWWINDOW);
66223a9ebe48 When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents: 33729
diff changeset
587 defint(d, "SW_HIDE", SW_HIDE);
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
588 defint(d, "INFINITE", INFINITE);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
589 defint(d, "WAIT_OBJECT_0", WAIT_OBJECT_0);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
590 defint(d, "CREATE_NEW_CONSOLE", CREATE_NEW_CONSOLE);
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44351
diff changeset
591 return m;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
592 }