annotate PC/_subprocess.c @ 46567:ffeecbebf3ca

Block 2.6-only doc change.
author Georg Brandl <georg@python.org>
date Sat, 26 Apr 2008 18:28:08 +0000
parents 86a2679dca46
children 94f64f11fdd0
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_getattr(sp_handle_object* self, char* name)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
115 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
116 return Py_FindMethod(sp_handle_methods, (PyObject*) self, name);
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 PyObject*
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
120 sp_handle_as_int(sp_handle_object* self)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
121 {
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
122 return PyLong_FromLong((long) self->handle);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
123 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
124
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
125 static PyNumberMethods sp_handle_as_number;
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
126
37144
91dd4d44d3bc Finish getting rid of statichere/staticforward
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
127 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
128 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
129 "_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
130 (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
131 0, /*tp_print*/
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
132 (getattrfunc) sp_handle_getattr,/*tp_getattr*/
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
133 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
134 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
135 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
136 &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
137 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
138 0, /*tp_as_mapping */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
139 0 /*tp_hash*/
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
140 };
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
141
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
142 /* -------------------------------------------------------------------- */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
143 /* windows API functions */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
144
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
145 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
146 sp_GetStdHandle(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
147 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
148 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
149 int std_handle;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
150
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
151 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
152 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
153
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
154 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
155 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
156 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
157
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
158 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
159 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
160
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
161 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
162 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
163 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
164 }
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 /* 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
167 return PyLong_FromLong((long) handle);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
168 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
169
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
170 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
171 sp_GetCurrentProcess(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
172 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
173 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
174 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
175
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
176 return sp_handle_new(GetCurrentProcess());
33723
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
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
179 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
180 sp_DuplicateHandle(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
181 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
182 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
183 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
184
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
185 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
186 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
187 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
188 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
189 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
190 int options = 0;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
191
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
192 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
193 &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 &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 &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 &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 &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 &options))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
199 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
200
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
201 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
202 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
203 (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
204 (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
205 (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
206 &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
207 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
208 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
209 options
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
210 );
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
211 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
212
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
213 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
214 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
215
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
216 return sp_handle_new(target_handle);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
217 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
218
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
219 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
220 sp_CreatePipe(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
221 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
222 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
223 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
224 BOOL result;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
225
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
226 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
227 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
228
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
229 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
230 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
231
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
232 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
233 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
234 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
235
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
236 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
237 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
238
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
239 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
240 "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
241 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
242
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
243 /* helpers for createprocess */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
244
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
245 static int
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
246 getint(PyObject* obj, char* name)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
247 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
248 PyObject* value;
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
249 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
250
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
251 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
252 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
253 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
254 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
255 }
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
256 ret = (int) PyLong_AsLong(value);
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
257 Py_DECREF(value);
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
258 return ret;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
259 }
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
260
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
261 static HANDLE
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
262 gethandle(PyObject* obj, char* name)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
263 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
264 sp_handle_object* value;
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
265 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
266
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
267 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
268 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
269 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
270 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
271 }
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
272 if (Py_TYPE(value) != &sp_handle_type)
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
273 ret = NULL;
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
274 else
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
275 ret = value->handle;
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
276 Py_DECREF(value);
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
277 return ret;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
278 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
279
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
280 static PyObject*
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
281 getenvironment(PyObject* environment)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
282 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
283 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
284 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
285 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
286 PyObject* values;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
287 Py_UNICODE* p;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
288
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
289 /* 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
290 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
291 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
292 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
293 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
294 }
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
295
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
296 envsize = PyMapping_Length(environment);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
297
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
298 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
299 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
300 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
301 goto error;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
302
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
303 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
304 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
305 goto error;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
306
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
307 p = PyUnicode_AS_UNICODE(out);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
308
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
309 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
310 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
311 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
312 PyObject* value = PyList_GET_ITEM(values, i);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
313
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
314 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
315 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
316 "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
317 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
318 }
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
319 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
320 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
321 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
322 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
323 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
324 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
325 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
326 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
327 }
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
328 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
329 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
330 *p++ = '=';
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
331 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
332 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
333 *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
334 }
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
335
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
336 /* 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
337 *p++ = '\0';
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
338 PyUnicode_Resize(&out, p - PyUnicode_AS_UNICODE(out));
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
339
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 /* PyObject_Print(out, stdout, 0); */
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
341
35855
429f537cf6d6 r849@spiff: Fredrik | 2005-11-09 10:00:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33929
diff changeset
342 Py_XDECREF(keys);
429f537cf6d6 r849@spiff: Fredrik | 2005-11-09 10:00:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33929
diff changeset
343 Py_XDECREF(values);
429f537cf6d6 r849@spiff: Fredrik | 2005-11-09 10:00:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33929
diff changeset
344
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
345 return out;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
346
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
347 error:
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
348 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
349 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
350 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
351 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
352 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
353
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
354 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
355 sp_CreateProcess(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
356 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
357 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
358 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
359 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
360 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
361
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
362 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
363 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
364 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
365 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
366 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
367 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
368 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
369 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
370 PyObject* startup_info;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
371
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
372 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
373 &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
374 &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
375 &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
376 &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
377 &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
378 &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
379 &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
380 &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
381 &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
382 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
383
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
384 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
385 si.cb = sizeof(si);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
386
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
387 /* 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
388 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
389 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
390 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
391 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
392 si.hStdError = gethandle(startup_info, "hStdError");
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
393
35856
4462871a6dce r858@spiff: Fredrik | 2005-11-10 23:40:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 35855
diff changeset
394 if (PyErr_Occurred())
4462871a6dce r858@spiff: Fredrik | 2005-11-10 23:40:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 35855
diff changeset
395 return NULL;
4462871a6dce r858@spiff: Fredrik | 2005-11-10 23:40:04 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 35855
diff changeset
396
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
397 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
398 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
399 else {
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
400 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
401 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
402 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
403 }
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
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 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
406 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
407 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
408 NULL,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
409 NULL,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
410 inherit_handles,
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
411 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
412 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
413 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
414 &si,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
415 &pi);
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
416 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
417
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
418 Py_XDECREF(environment);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
419
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
420 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
421 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
422
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
423 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
424 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
425 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
426 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
427 pi.dwThreadId);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
428 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
429
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
430 static PyObject *
36086
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
431 sp_TerminateProcess(PyObject* self, PyObject* args)
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
432 {
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
433 BOOL result;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
434
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
435 long process;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
436 int exit_code;
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
437 if (! PyArg_ParseTuple(args, "li:TerminateProcess", &process,
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
438 &exit_code))
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
439 return NULL;
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 result = TerminateProcess((HANDLE) process, exit_code);
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 if (! result)
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
444 return PyErr_SetFromWindowsErr(GetLastError());
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
445
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
446 Py_INCREF(Py_None);
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
447 return Py_None;
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
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
450 static PyObject *
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
451 sp_GetExitCodeProcess(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
452 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
453 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
454 BOOL result;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
455
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
456 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
457 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
458 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
459
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
460 result = GetExitCodeProcess((HANDLE) process, &exit_code);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
461
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
462 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
463 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
464
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
465 return PyLong_FromLong(exit_code);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
466 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
467
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
468 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
469 sp_WaitForSingleObject(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
470 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
471 DWORD result;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
472
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
473 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
474 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
475 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
476 &handle,
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
477 &milliseconds))
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
478 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
479
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
480 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
481 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
482 Py_END_ALLOW_THREADS
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
483
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
484 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
485 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
486
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
487 return PyLong_FromLong((int) result);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
488 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
489
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
490 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
491 sp_GetVersion(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
492 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
493 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
494 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
495
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
496 return PyLong_FromLong((int) GetVersion());
33723
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
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
499 static PyObject *
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
500 sp_GetModuleFileName(PyObject* self, PyObject* args)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
501 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
502 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
503 long module;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
504 WCHAR filename[MAX_PATH];
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
505
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
506 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
507 return NULL;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
508
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
509 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
510 filename[MAX_PATH-1] = '\0';
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
511
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
512 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
513 return PyErr_SetFromWindowsErr(GetLastError());
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
514
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42338
diff changeset
515 return PyUnicode_FromUnicode(filename, Py_UNICODE_strlen(filename));
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
516 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
517
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
518 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
519 {"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
520 {"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
521 {"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
522 {"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
523 {"CreateProcess", sp_CreateProcess, METH_VARARGS},
36086
e14f47964748 added TerminateProcess support to _subprocess driver
Fredrik Lundh <fredrik@pythonware.com>
parents: 36030
diff changeset
524 {"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
525 {"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
526 {"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
527 {"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
528 {"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
529 {NULL, NULL}
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
530 };
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
531
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
532 /* -------------------------------------------------------------------- */
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
533
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
534 static void
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
535 defint(PyObject* d, const char* name, int value)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
536 {
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
537 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
538 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
539 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
540 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
541 }
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
542 }
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
543
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
544 #if PY_VERSION_HEX >= 0x02030000
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
545 PyMODINIT_FUNC
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
546 #else
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
547 DL_EXPORT(void)
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
548 #endif
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
549 init_subprocess()
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
550 {
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
551 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
552 PyObject *m;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
553
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
554 /* patch up object descriptors */
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
555 Py_TYPE(&sp_handle_type) = &PyType_Type;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
556 sp_handle_as_number.nb_int = (unaryfunc) sp_handle_as_int;
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
557
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
558 m = Py_InitModule("_subprocess", sp_functions);
36324
1af7f719ed28 Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36086
diff changeset
559 if (m == NULL)
1af7f719ed28 Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36086
diff changeset
560 return;
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
561 d = PyModule_GetDict(m);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
562
33729
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
563 /* constants */
0d6d56b2164b Before this turns into an unreadable mess, follow PEP 7 by using
Tim Peters <tim.peters@gmail.com>
parents: 33723
diff changeset
564 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
565 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
566 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
567 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
568 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
569 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
570 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
571 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
572 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
573 defint(d, "CREATE_NEW_CONSOLE", CREATE_NEW_CONSOLE);
33723
76641824cf05 Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff changeset
574 }