~brian-sidebotham/wxwidgets-cmake/wxpython-2.9.4

« back to all changes in this revision

Viewing changes to wxPython/src/_process.i

  • Committer: Brian Sidebotham
  • Date: 2013-08-03 14:30:08 UTC
  • Revision ID: brian.sidebotham@gmail.com-20130803143008-c7806tkych1tp6fc
Initial import into Bazaar

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/////////////////////////////////////////////////////////////////////////////
 
2
// Name:        _process.i
 
3
// Purpose:     SWIG interface stuff for wxProcess and wxExecute
 
4
//
 
5
// Author:      Robin Dunn
 
6
//
 
7
// Created:     18-June-1999
 
8
// RCS-ID:      $Id: _process.i 70133 2011-12-28 02:14:56Z RD $
 
9
// Copyright:   (c) 2003 by Total Control Software
 
10
// Licence:     wxWindows license
 
11
/////////////////////////////////////////////////////////////////////////////
 
12
 
 
13
// Not a %module
 
14
 
 
15
 
 
16
//---------------------------------------------------------------------------
 
17
%newgroup
 
18
 
 
19
%{
 
20
%}
 
21
 
 
22
//---------------------------------------------------------------------------
 
23
 
 
24
enum
 
25
{
 
26
    // no redirection
 
27
    wxPROCESS_DEFAULT = 0,
 
28
 
 
29
    // redirect the IO of the child process
 
30
    wxPROCESS_REDIRECT = 1
 
31
};
 
32
 
 
33
enum wxKillError
 
34
{
 
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
 
40
};
 
41
 
 
42
enum wxKillFlags
 
43
{
 
44
    wxKILL_NOCHILDREN = 0,  // don't kill children
 
45
    wxKILL_CHILDREN = 1     // kill children
 
46
};
 
47
 
 
48
 
 
49
enum wxSignal
 
50
{
 
51
    wxSIGNONE = 0,  // verify if the process exists under Unix
 
52
    wxSIGHUP,
 
53
    wxSIGINT,
 
54
    wxSIGQUIT,
 
55
    wxSIGILL,
 
56
    wxSIGTRAP,
 
57
    wxSIGABRT,
 
58
    wxSIGIOT = wxSIGABRT,   // another name
 
59
    wxSIGEMT,
 
60
    wxSIGFPE,
 
61
    wxSIGKILL,
 
62
    wxSIGBUS,
 
63
    wxSIGSEGV,
 
64
    wxSIGSYS,
 
65
    wxSIGPIPE,
 
66
    wxSIGALRM,
 
67
    wxSIGTERM
 
68
 
 
69
    // further signals are different in meaning between different Unix systems
 
70
};
 
71
 
 
72
 
 
73
//---------------------------------------------------------------------------
 
74
 
 
75
 
 
76
%{ 
 
77
IMP_PYCALLBACK_VOID_INTINT( wxPyProcess, wxProcess, OnTerminate);
 
78
%}
 
79
 
 
80
 
 
81
%rename(Process) wxPyProcess;
 
82
class wxPyProcess : public wxEvtHandler {
 
83
public:
 
84
    // kill the process with the given PID
 
85
    static wxKillError Kill(int pid,
 
86
                            wxSignal sig = wxSIGTERM,
 
87
                            int flags = wxKILL_NOCHILDREN);
 
88
 
 
89
    // test if the given process exists
 
90
    static bool Exists(int pid);
 
91
 
 
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
 
94
    // std{in|out|err}
 
95
    //
 
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);
 
100
 
 
101
 
 
102
    %pythonAppend wxPyProcess  setCallbackInfo(Process) "; self.this.own(False)"
 
103
    wxPyProcess(wxEvtHandler *parent = NULL, int id = -1);
 
104
    ~wxPyProcess();
 
105
 
 
106
    void _setCallbackInfo(PyObject* self, PyObject* _class);
 
107
 
 
108
 
 
109
    DocDeclStr(
 
110
        long , GetPid() const,
 
111
        "get the process ID of the process executed by Open()", "");
 
112
 
 
113
 
 
114
    void OnTerminate(int pid, int status);
 
115
    %MAKE_BASE_FUNC(Process, OnTerminate);
 
116
 
 
117
    // call Redirect before passing the object to wxExecute() to redirect the
 
118
    // launched process stdin/stdout, then use GetInputStream() and
 
119
    // GetOutputStream() to get access to them
 
120
    void Redirect();
 
121
    bool IsRedirected();
 
122
 
 
123
 
 
124
    // detach from the parent - should be called by the parent if it's deleted
 
125
    // before the process it started terminates
 
126
    void Detach();
 
127
 
 
128
    wxInputStream *GetInputStream();
 
129
    wxInputStream *GetErrorStream();
 
130
    wxOutputStream *GetOutputStream();
 
131
 
 
132
    void CloseOutput();
 
133
 
 
134
    // return True if the child process stdout is not closed
 
135
    bool IsInputOpened() const;
 
136
 
 
137
    // return True if any input is available on the child process stdout/err
 
138
    bool IsInputAvailable() const;
 
139
    bool IsErrorAvailable() const;
 
140
 
 
141
    %property(ErrorStream, GetErrorStream, doc="See `GetErrorStream`");
 
142
    %property(InputStream, GetInputStream, doc="See `GetInputStream`");
 
143
    %property(OutputStream, GetOutputStream, doc="See `GetOutputStream`");
 
144
 
 
145
    %property(InputOpened, IsInputOpened);
 
146
    %property(InputAvailable, IsInputAvailable);
 
147
    %property(ErrorAvailable, IsErrorAvailable);
 
148
};
 
149
 
 
150
//---------------------------------------------------------------------------
 
151
 
 
152
 
 
153
class wxProcessEvent : public wxEvent {
 
154
public:
 
155
    wxProcessEvent(int id = 0, int pid = 0, int exitcode = 0);
 
156
    int GetPid();
 
157
    int GetExitCode();
 
158
    int m_pid, m_exitcode;
 
159
 
 
160
    %property(ExitCode, GetExitCode, doc="See `GetExitCode`");
 
161
    %property(Pid, GetPid, doc="See `GetPid`");
 
162
};
 
163
 
 
164
 
 
165
%constant wxEventType wxEVT_END_PROCESS;
 
166
 
 
167
%pythoncode {
 
168
EVT_END_PROCESS = wx.PyEventBinder( wxEVT_END_PROCESS, 1 )
 
169
}
 
170
 
 
171
//---------------------------------------------------------------------------
 
172
 
 
173
enum
 
174
{
 
175
    // execute the process asynchronously
 
176
    wxEXEC_ASYNC    = 0,
 
177
 
 
178
    // execute it synchronously, i.e. wait until it finishes
 
179
    wxEXEC_SYNC     = 1,
 
180
 
 
181
    // under Windows, don't hide the child even if it's IO is redirected (this
 
182
    // is done by default)
 
183
    wxEXEC_NOHIDE   = 2,
 
184
    
 
185
    // under Unix, if the process is the group leader then killing -pid kills
 
186
    // all children as well as pid
 
187
    wxEXEC_MAKE_GROUP_LEADER = 4,
 
188
 
 
189
    // by default synchronous execution disables all program windows to avoid
 
190
    // that the user interacts with the program while the child process is
 
191
    // running, you can use this flag to prevent this from happening
 
192
    wxEXEC_NODISABLE = 8,
 
193
 
 
194
    // by default, the event loop is run while waiting for synchronous execution
 
195
    // to complete and this flag can be used to simply block the main process
 
196
    // until the child process finishes
 
197
    wxEXEC_NOEVENTS = 16,
 
198
 
 
199
    // convenient synonym for flags given system()-like behaviour
 
200
    wxEXEC_BLOCK = wxEXEC_SYNC | wxEXEC_NOEVENTS,
 
201
 
 
202
    wxEXEC_SHOW_CONSOLE,
 
203
    wxEXEC_HIDE_CONSOLE
 
204
};
 
205
 
 
206
 
 
207
MustHaveApp(wxExecute);
 
208
 
 
209
long wxExecute(const wxString& command,
 
210
               int flags = wxEXEC_ASYNC,
 
211
               wxPyProcess *process = NULL);
 
212
 
 
213
 
 
214
 
 
215
%typemap(in,numinputs=0) wxKillError* rc ( wxKillError temp ) { $1 = &temp; }
 
216
%typemap(argout) wxKillError* rc
 
217
{
 
218
    PyObject* o;
 
219
    o = PyInt_FromLong((long) (*$1));
 
220
#if SWIG_VERSION < 0x010328
 
221
    $result = t_output_helper($result, o);
 
222
#else
 
223
    $result = SWIG_Python_AppendOutput($result, o);
 
224
#endif
 
225
}
 
226
 
 
227
int wxKill(long pid, wxSignal sig = wxSIGTERM, wxKillError* rc, int flags = wxKILL_NOCHILDREN);
 
228
 
 
229
 
 
230
//---------------------------------------------------------------------------
 
231
%init %{
 
232
    wxPyPtrTypeMap_Add("wxProcess", "wxPyProcess");
 
233
%}
 
234
//---------------------------------------------------------------------------