> Last time I tried it there were still a few windows issues (docs say > these have been resolved), but I thought the API was well-designed. The details: The module works great on Windows currently, but requires the win32all extensions. The idea is to get rid of this dependency by writing a glue module, pretty much as _winreg. Work on such a _process module has been done on two fronts: * A friendly Python-developer has gotten quite far, but was experiencing some strange hangs. I haven't been able to look at this work yet. * I've started working on an implementation myself. I was using _winreg as some sort of template. The problem is: I've never written extension modules before :-) It was quite easy to export the numeric constants, but when I came to creating Python objects, I was lost. I'll guess I need to read some documentation. This is what remains: win32api: GetStdHandle GetCurrentProcess, DuplicateHandle win32pipe: CreatePipe win32process: CreateProcess, STARTUPINFO, GetExitCodeProcess win32event: WaitForSingleObject Here's the module so far: /* _process.c */ #include "windows.h" #include "Python.h" #include "structmember.h" #include "malloc.h" /* for alloca */ /* The win32api module reports the function name that failed, but this concept is not in the Python core. Hopefully it will one day, and in the meantime I dont want to lose this info... */ #define PyErr_SetFromWindowsErrWithFunction(rc, fnname) \ PyErr_SetFromWindowsErr(rc) /* Forward declares */ /* Doc strings */ // FIXME PyDoc_STRVAR(module_doc, "This module provides...\n"); static struct PyMethodDef process_methods[] = { NULL, }; static void insint(PyObject * d, char * name, long value) { PyObject *v = PyInt_FromLong(value); if (!v || PyDict_SetItemString(d, name, v)) PyErr_Clear(); Py_XDECREF(v); } #define ADD_INT(val) insint(d, #val, val) PyMODINIT_FUNC init_process(void) { PyObject *m, *d; m = Py_InitModule3("_process", process_methods, module_doc); d = PyModule_GetDict(m); Py_INCREF(PyExc_WindowsError); if (PyDict_SetItemString(d, "error", PyExc_WindowsError) != 0) return; /* Add the relevant constants */ ADD_INT(DUPLICATE_SAME_ACCESS); ADD_INT(STARTF_USESTDHANDLES); ADD_INT(STD_INPUT_HANDLE); ADD_INT(STD_OUTPUT_HANDLE); ADD_INT(STD_ERROR_HANDLE); ADD_INT(INFINITE); ADD_INT(WAIT_OBJECT_0); } (I will be away for a couple of days.) /Peter Åstrand <astrand at lysator.liu.se>
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4