From: Robin Dunn Date: Fri, 12 Jul 2002 21:30:17 +0000 (+0000) Subject: Added wxProcess_Open and etc. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/814f509cc970b44eba8aa7268ec97f55987b7e58?hp=47eea71e188b7b412f319e729c2a0d8f07eacaf9 Added wxProcess_Open and etc. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16159 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/src/misc2.i b/wxPython/src/misc2.i index 22a8d2d7b7..c80685a978 100644 --- a/wxPython/src/misc2.i +++ b/wxPython/src/misc2.i @@ -769,6 +769,16 @@ enum { }; +enum wxKillError +{ + wxKILL_OK, // no error + wxKILL_BAD_SIGNAL, // no such signal + wxKILL_ACCESS_DENIED, // permission denied + wxKILL_NO_PROCESS, // no such process + wxKILL_ERROR // another, unspecified error +}; + + class wxProcessEvent : public wxEvent { public: wxProcessEvent(int id = 0, int pid = 0, int exitcode = 0); @@ -800,6 +810,23 @@ IMP_PYCALLBACK_VOID_INTINT( wxPyProcess, wxProcess, OnTerminate); %name(wxProcess)class wxPyProcess : public wxEvtHandler { public: + // kill the process with the given PID + static wxKillError Kill(int pid, wxSignal sig = wxSIGTERM); + + // test if the given process exists + static bool Exists(int pid); + + // this function replaces the standard popen() one: it launches a process + // asynchronously and allows the caller to get the streams connected to its + // std{in|out|err} + // + // on error NULL is returned, in any case the process object will be + // deleted automatically when the process terminates and should *not* be + // deleted by the caller + static wxPyProcess *Open(const wxString& cmd); + + + wxPyProcess(wxEvtHandler *parent = NULL, int id = -1); %addmethods { void Destroy() { delete self; } } diff --git a/wxPython/src/msw/misc2.cpp b/wxPython/src/msw/misc2.cpp index eca098bdaf..3133bab331 100644 --- a/wxPython/src/msw/misc2.cpp +++ b/wxPython/src/msw/misc2.cpp @@ -6104,6 +6104,89 @@ static void *SwigwxPyProcessTowxObject(void *ptr) { return (void *) dest; } +static PyObject *_wrap_wxProcess_Kill(PyObject *self, PyObject *args, PyObject *kwargs) { + PyObject * _resultobj; + wxKillError _result; + int _arg0; + wxSignal * _arg1 = (wxSignal *) &wxSIGTERM; + PyObject * _argo1 = 0; + char *_kwnames[] = { "pid","sig", NULL }; + + self = self; + if(!PyArg_ParseTupleAndKeywords(args,kwargs,"i|O:wxProcess_Kill",_kwnames,&_arg0,&_argo1)) + return NULL; + if (_argo1) { + if (_argo1 == Py_None) { _arg1 = NULL; } + else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSignal_p")) { + PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxProcess_Kill. Expected _wxSignal_p."); + return NULL; + } + } +{ + PyThreadState* __tstate = wxPyBeginAllowThreads(); + _result = (wxKillError )wxPyProcess::Kill(_arg0,*_arg1); + + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) return NULL; +} _resultobj = Py_BuildValue("i",_result); + return _resultobj; +} + +static PyObject *_wrap_wxProcess_Exists(PyObject *self, PyObject *args, PyObject *kwargs) { + PyObject * _resultobj; + bool _result; + int _arg0; + char *_kwnames[] = { "pid", NULL }; + + self = self; + if(!PyArg_ParseTupleAndKeywords(args,kwargs,"i:wxProcess_Exists",_kwnames,&_arg0)) + return NULL; +{ + PyThreadState* __tstate = wxPyBeginAllowThreads(); + _result = (bool )wxPyProcess::Exists(_arg0); + + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) return NULL; +} _resultobj = Py_BuildValue("i",_result); + return _resultobj; +} + +static PyObject *_wrap_wxProcess_Open(PyObject *self, PyObject *args, PyObject *kwargs) { + PyObject * _resultobj; + wxPyProcess * _result; + wxString * _arg0; + PyObject * _obj0 = 0; + char *_kwnames[] = { "cmd", NULL }; + char _ptemp[128]; + + self = self; + if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxProcess_Open",_kwnames,&_obj0)) + return NULL; +{ + _arg0 = wxString_in_helper(_obj0); + if (_arg0 == NULL) + return NULL; +} +{ + PyThreadState* __tstate = wxPyBeginAllowThreads(); + _result = (wxPyProcess *)wxPyProcess::Open(*_arg0); + + wxPyEndAllowThreads(__tstate); + if (PyErr_Occurred()) return NULL; +} if (_result) { + SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyProcess_p"); + _resultobj = Py_BuildValue("s",_ptemp); + } else { + Py_INCREF(Py_None); + _resultobj = Py_None; + } +{ + if (_obj0) + delete _arg0; +} + return _resultobj; +} + #define new_wxProcess(_swigarg0,_swigarg1) (new wxPyProcess(_swigarg0,_swigarg1)) static PyObject *_wrap_new_wxProcess(PyObject *self, PyObject *args, PyObject *kwargs) { PyObject * _resultobj; @@ -10380,6 +10463,9 @@ static PyMethodDef misc2cMethods[] = { { "wxProcess__setCallbackInfo", (PyCFunction) _wrap_wxProcess__setCallbackInfo, METH_VARARGS | METH_KEYWORDS }, { "wxProcess_Destroy", (PyCFunction) _wrap_wxProcess_Destroy, METH_VARARGS | METH_KEYWORDS }, { "new_wxProcess", (PyCFunction) _wrap_new_wxProcess, METH_VARARGS | METH_KEYWORDS }, + { "wxProcess_Open", (PyCFunction) _wrap_wxProcess_Open, METH_VARARGS | METH_KEYWORDS }, + { "wxProcess_Exists", (PyCFunction) _wrap_wxProcess_Exists, METH_VARARGS | METH_KEYWORDS }, + { "wxProcess_Kill", (PyCFunction) _wrap_wxProcess_Kill, METH_VARARGS | METH_KEYWORDS }, { "wxProcessEvent_m_exitcode_get", (PyCFunction) _wrap_wxProcessEvent_m_exitcode_get, METH_VARARGS | METH_KEYWORDS }, { "wxProcessEvent_m_exitcode_set", (PyCFunction) _wrap_wxProcessEvent_m_exitcode_set, METH_VARARGS | METH_KEYWORDS }, { "wxProcessEvent_m_pid_get", (PyCFunction) _wrap_wxProcessEvent_m_pid_get, METH_VARARGS | METH_KEYWORDS }, @@ -10808,6 +10894,11 @@ SWIGEXPORT(void) initmisc2c() { PyDict_SetItemString(d,"wxTraceRefCount", PyInt_FromLong((long) wxTraceRefCount)); PyDict_SetItemString(d,"wxTraceOleCalls", PyInt_FromLong((long) wxTraceOleCalls)); PyDict_SetItemString(d,"wxEVT_END_PROCESS", PyInt_FromLong((long) wxEVT_END_PROCESS)); + PyDict_SetItemString(d,"wxKILL_OK", PyInt_FromLong((long) wxKILL_OK)); + PyDict_SetItemString(d,"wxKILL_BAD_SIGNAL", PyInt_FromLong((long) wxKILL_BAD_SIGNAL)); + PyDict_SetItemString(d,"wxKILL_ACCESS_DENIED", PyInt_FromLong((long) wxKILL_ACCESS_DENIED)); + PyDict_SetItemString(d,"wxKILL_NO_PROCESS", PyInt_FromLong((long) wxKILL_NO_PROCESS)); + PyDict_SetItemString(d,"wxKILL_ERROR", PyInt_FromLong((long) wxKILL_ERROR)); PyDict_SetItemString(d,"wxEXEC_ASYNC", PyInt_FromLong((long) wxEXEC_ASYNC)); PyDict_SetItemString(d,"wxEXEC_SYNC", PyInt_FromLong((long) wxEXEC_SYNC)); PyDict_SetItemString(d,"wxEXEC_NOHIDE", PyInt_FromLong((long) wxEXEC_NOHIDE)); diff --git a/wxPython/src/msw/misc2.py b/wxPython/src/msw/misc2.py index 26c88e98f2..2ca80eaf0f 100644 --- a/wxPython/src/msw/misc2.py +++ b/wxPython/src/msw/misc2.py @@ -1198,6 +1198,15 @@ wxLog_GetTraceMask = misc2c.wxLog_GetTraceMask wxLog_IsAllowedTraceMask = misc2c.wxLog_IsAllowedTraceMask +wxProcess_Kill = misc2c.wxProcess_Kill + +wxProcess_Exists = misc2c.wxProcess_Exists + +def wxProcess_Open(*_args, **_kwargs): + val = apply(misc2c.wxProcess_Open,_args,_kwargs) + if val: val = wxProcessPtr(val) + return val + wxFileType_ExpandCommand = misc2c.wxFileType_ExpandCommand wxMimeTypesManager_IsOfType = misc2c.wxMimeTypesManager_IsOfType @@ -1335,6 +1344,11 @@ wxTraceResAlloc = misc2c.wxTraceResAlloc wxTraceRefCount = misc2c.wxTraceRefCount wxTraceOleCalls = misc2c.wxTraceOleCalls wxEVT_END_PROCESS = misc2c.wxEVT_END_PROCESS +wxKILL_OK = misc2c.wxKILL_OK +wxKILL_BAD_SIGNAL = misc2c.wxKILL_BAD_SIGNAL +wxKILL_ACCESS_DENIED = misc2c.wxKILL_ACCESS_DENIED +wxKILL_NO_PROCESS = misc2c.wxKILL_NO_PROCESS +wxKILL_ERROR = misc2c.wxKILL_ERROR wxEXEC_ASYNC = misc2c.wxEXEC_ASYNC wxEXEC_SYNC = misc2c.wxEXEC_SYNC wxEXEC_NOHIDE = misc2c.wxEXEC_NOHIDE