1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: SWIG interface stuff for wxProcess and wxExecute
7 // Created: 18-June-1999
9 // Copyright: (c) 2003 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
16 //---------------------------------------------------------------------------
22 //---------------------------------------------------------------------------
27 wxPROCESS_DEFAULT = 0,
29 // redirect the IO of the child process
30 wxPROCESS_REDIRECT = 1
35 wxKILL_OK, // no error
36 wxKILL_BAD_SIGNAL, // no such signal
37 wxKILL_ACCESS_DENIED, // permission denied
38 wxKILL_NO_PROCESS, // no such process
39 wxKILL_ERROR // another, unspecified error
44 wxKILL_NOCHILDREN = 0, // don't kill children
45 wxKILL_CHILDREN = 1 // kill children
51 wxSIGNONE = 0, // verify if the process exists under Unix
58 wxSIGIOT = wxSIGABRT, // another name
69 // further signals are different in meaning between different Unix systems
73 //---------------------------------------------------------------------------
77 IMP_PYCALLBACK_VOID_INTINT( wxPyProcess, wxProcess, OnTerminate);
81 %rename(Process) wxPyProcess;
82 class wxPyProcess : public wxEvtHandler {
84 // kill the process with the given PID
85 static wxKillError Kill(int pid,
86 wxSignal sig = wxSIGTERM,
87 int flags = wxKILL_NOCHILDREN);
89 // test if the given process exists
90 static bool Exists(int pid);
92 // this function replaces the standard popen() one: it launches a process
93 // asynchronously and allows the caller to get the streams connected to its
96 // on error NULL is returned, in any case the process object will be
97 // deleted automatically when the process terminates and should *not* be
98 // deleted by the caller
99 static wxPyProcess *Open(const wxString& cmd, int flags = wxEXEC_ASYNC);
102 %pythonAppend wxPyProcess "self._setCallbackInfo(self, Process)"
103 wxPyProcess(wxEvtHandler *parent = NULL, int id = -1);
105 void _setCallbackInfo(PyObject* self, PyObject* _class);
107 void base_OnTerminate(int pid, int status);
109 // call Redirect before passing the object to wxExecute() to redirect the
110 // launched process stdin/stdout, then use GetInputStream() and
111 // GetOutputStream() to get access to them
116 // detach from the parent - should be called by the parent if it's deleted
117 // before the process it started terminates
120 wxInputStream *GetInputStream();
121 wxInputStream *GetErrorStream();
122 wxOutputStream *GetOutputStream();
126 // return True if the child process stdout is not closed
127 bool IsInputOpened() const;
129 // return True if any input is available on the child process stdout/err
130 bool IsInputAvailable() const;
131 bool IsErrorAvailable() const;
134 //---------------------------------------------------------------------------
137 class wxProcessEvent : public wxEvent {
139 wxProcessEvent(int id = 0, int pid = 0, int exitcode = 0);
142 int m_pid, m_exitcode;
146 %constant wxEventType wxEVT_END_PROCESS;
149 EVT_END_PROCESS = wx.PyEventBinder( wxEVT_END_PROCESS, 1 )
152 //---------------------------------------------------------------------------
156 // execute the process asynchronously
159 // execute it synchronously, i.e. wait until it finishes
162 // under Windows, don't hide the child even if it's IO is redirected (this
163 // is done by default)
166 // under Unix, if the process is the group leader then killing -pid kills
167 // all children as well as pid
168 wxEXEC_MAKE_GROUP_LEADER = 4,
170 // by default synchronous execution disables all program windows to avoid
171 // that the user interacts with the program while the child process is
172 // running, you can use this flag to prevent this from happening
177 MustHaveApp(wxExecute);
179 long wxExecute(const wxString& command,
180 int flags = wxEXEC_ASYNC,
181 wxPyProcess *process = NULL);
185 %typemap(in,numinputs=0) wxKillError* rc ( wxKillError temp ) { $1 = &temp; }
186 %typemap(argout) wxKillError* rc
189 o = PyInt_FromLong((long) (*$1));
190 $result = t_output_helper($result, o);
193 int wxKill(long pid, wxSignal sig = wxSIGTERM, wxKillError* rc, int flags = wxKILL_NOCHILDREN);
196 //---------------------------------------------------------------------------
198 wxPyPtrTypeMap_Add("wxProcess", "wxPyProcess");
200 //---------------------------------------------------------------------------