Lines Matching refs:self
82 def __init__(self, args, cwd=None, decode_signal=False): argument
95 self.decode_signal = decode_signal
96 self.waited = False
97 self.exit_code = 0
98 self.exit_info = ''
99 self.buf = ''
100 self.output = ''
101 self.logfile_read = None
102 self.before = ''
103 self.after = ''
104 self.timeout = None
106 self.re_vt100 = re.compile(r'(\x1b\[|\x9b)[^@-_]*[@-_]|\x1b[@-_]', re.I)
108 (self.pid, self.fd) = pty.fork()
109 if self.pid == 0:
134 new = termios.tcgetattr(self.fd)
140 termios.tcsetattr(self.fd, termios.TCSANOW, new)
142 self.poll = select.poll()
143 self.poll.register(self.fd, select.POLLIN | select.POLLPRI | select.POLLERR |
147 termios.tcsetattr(self.fd, termios.TCSANOW, old)
148 self.close()
151 def kill(self, sig): argument
161 os.kill(self.pid, sig)
163 def checkalive(self): argument
173 if self.waited:
174 return False, self.exit_code, self.exit_info
176 w = os.waitpid(self.pid, os.WNOHANG)
182 self.exit_code = os.WEXITSTATUS(status)
183 self.exit_info = 'status %d' % self.exit_code
186 self.exit_code = -signum
187 self.exit_info = 'signal %d (%s)' % (signum, signal.Signals(signum).name)
188 self.waited = True
189 return False, self.exit_code, self.exit_info
191 def isalive(self): argument
200 return self.checkalive()[0]
202 def send(self, data): argument
212 os.write(self.fd, data.encode(errors='replace'))
214 def receive(self, num_bytes): argument
227 c = os.read(self.fd, num_bytes).decode(errors='replace')
232 if self.decode_signal and err.errno == 5: # I/O error
233 alive, _, info = self.checkalive()
240 def expect(self, patterns): argument
270 m = pattern.search(self.buf)
280 self.before = self.buf[:pos]
281 self.after = self.buf[pos:posafter]
282 self.output += self.buf[:posafter]
283 self.buf = self.buf[posafter:]
286 if self.timeout:
288 poll_maxwait = self.timeout - tdelta_ms
289 if tdelta_ms > self.timeout:
293 events = self.poll.poll(poll_maxwait)
296 c = self.receive(1024)
297 if self.logfile_read:
298 self.logfile_read.write(c)
299 self.buf += c
303 self.buf = self.re_vt100.sub('', self.buf, count=1000000)
305 if self.logfile_read:
306 self.logfile_read.flush()
308 def close(self): argument
322 self.send(chr(EXIT_CHAR) * 2)
326 if not self.isalive():
331 os.close(self.fd)
333 if not self.isalive():
339 def get_expect_output(self): argument
345 return self.output