%newgroup
%{
-%}
+%}
//---------------------------------------------------------------------------
wxKILL_ERROR // another, unspecified error
};
+enum wxKillFlags
+{
+ wxKILL_NOCHILDREN = 0, // don't kill children
+ wxKILL_CHILDREN = 1 // kill children
+};
+
+
enum wxSignal
{
wxSIGNONE = 0, // verify if the process exists under Unix
%}
-%name(Process)class wxPyProcess : public wxEvtHandler {
+%rename(Process) wxPyProcess;
+class wxPyProcess : public wxEvtHandler {
public:
// kill the process with the given PID
- static wxKillError Kill(int pid, wxSignal sig = wxSIGTERM);
+ static wxKillError Kill(int pid,
+ wxSignal sig = wxSIGTERM,
+ int flags = wxKILL_NOCHILDREN);
// test if the given process exists
static bool Exists(int pid);
static wxPyProcess *Open(const wxString& cmd, int flags = wxEXEC_ASYNC);
- %addtofunc wxPyProcess "self._setCallbackInfo(self, Process)"
+ %pythonAppend wxPyProcess setCallbackInfo(Process) "; self.this.own(False)"
wxPyProcess(wxEvtHandler *parent = NULL, int id = -1);
+ ~wxPyProcess();
void _setCallbackInfo(PyObject* self, PyObject* _class);
- void base_OnTerminate(int pid, int status);
+
+ DocDeclStr(
+ long , GetPid() const,
+ "get the process ID of the process executed by Open()", "");
+
+
+ void OnTerminate(int pid, int status);
+ %MAKE_BASE_FUNC(Process, OnTerminate);
// call Redirect before passing the object to wxExecute() to redirect the
// launched process stdin/stdout, then use GetInputStream() and
void Redirect();
bool IsRedirected();
-
+
// detach from the parent - should be called by the parent if it's deleted
// before the process it started terminates
void Detach();
void CloseOutput();
- // return TRUE if the child process stdout is not closed
+ // return True if the child process stdout is not closed
bool IsInputOpened() const;
- // return TRUE if any input is available on the child process stdout/err
+ // return True if any input is available on the child process stdout/err
bool IsInputAvailable() const;
bool IsErrorAvailable() const;
+
+ %property(ErrorStream, GetErrorStream, doc="See `GetErrorStream`");
+ %property(InputStream, GetInputStream, doc="See `GetInputStream`");
+ %property(OutputStream, GetOutputStream, doc="See `GetOutputStream`");
+
+ %property(InputOpened, IsInputOpened);
+ %property(InputAvailable, IsInputAvailable);
+ %property(ErrorAvailable, IsErrorAvailable);
};
//---------------------------------------------------------------------------
int GetPid();
int GetExitCode();
int m_pid, m_exitcode;
+
+ %property(ExitCode, GetExitCode, doc="See `GetExitCode`");
+ %property(Pid, GetPid, doc="See `GetPid`");
};
// under Unix, if the process is the group leader then killing -pid kills
// all children as well as pid
- wxEXEC_MAKE_GROUP_LEADER = 4
+ wxEXEC_MAKE_GROUP_LEADER = 4,
+
+ // by default synchronous execution disables all program windows to avoid
+ // that the user interacts with the program while the child process is
+ // running, you can use this flag to prevent this from happening
+ wxEXEC_NODISABLE = 8
};
+MustHaveApp(wxExecute);
+
long wxExecute(const wxString& command,
int flags = wxEXEC_ASYNC,
wxPyProcess *process = NULL);
+
+%typemap(in,numinputs=0) wxKillError* rc ( wxKillError temp ) { $1 = &temp; }
+%typemap(argout) wxKillError* rc
+{
+ PyObject* o;
+ o = PyInt_FromLong((long) (*$1));
+#if SWIG_VERSION < 0x010328
+ $result = t_output_helper($result, o);
+#else
+ $result = SWIG_Python_AppendOutput($result, o);
+#endif
+}
+
+int wxKill(long pid, wxSignal sig = wxSIGTERM, wxKillError* rc, int flags = wxKILL_NOCHILDREN);
+
+
//---------------------------------------------------------------------------
%init %{
wxPyPtrTypeMap_Add("wxProcess", "wxPyProcess");