self.check_status = check_status
self.exitstatus = self.returncode = None
- def wait(self):
- if self.finished:
- # Avoid calling communicate() on a dead process because it'll
- # give you stick about std* already being closed
- if self.check_status and self.exitstatus != 0:
- raise CommandFailedError(self.args, self.exitstatus)
- else:
- return
-
- out, err = self.subproc.communicate()
- out, err = rm_nonascii_chars(out), rm_nonascii_chars(err)
+ def _write_stdout(self, out):
if isinstance(self.stdout, StringIO):
self.stdout.write(out.decode(errors='ignore'))
elif self.stdout is None:
pass
else:
self.stdout.write(out)
+
+ def _write_stderr(self, err):
if isinstance(self.stderr, StringIO):
self.stderr.write(err.decode(errors='ignore'))
elif self.stderr is None:
else:
self.stderr.write(err)
+ def wait(self):
+ if self.finished:
+ # Avoid calling communicate() on a dead process because it'll
+ # give you stick about std* already being closed
+ if self.check_status and self.exitstatus != 0:
+ raise CommandFailedError(self.args, self.exitstatus)
+ else:
+ return
+
+ out, err = self.subproc.communicate()
+ out, err = rm_nonascii_chars(out), rm_nonascii_chars(err)
+ self._write_stdout(out)
+ self._write_stderr(err)
+
self.exitstatus = self.returncode = self.subproc.returncode
if self.exitstatus != 0:
if self.subproc.poll() is not None:
out, err = self.subproc.communicate()
- if isinstance(self.stdout, StringIO):
- self.stdout.write(out.decode(errors='ignore'))
- elif self.stdout is None:
- pass
- else:
- self.stdout.write(out)
- if isinstance(self.stderr, StringIO):
- self.stderr.write(err.decode(errors='ignore'))
- elif self.stderr is None:
- pass
- else:
- self.stderr.write(err)
+ self._write_stdout(out)
+ self._write_stderr(err)
+
self.exitstatus = self.returncode = self.subproc.returncode
+
return True
else:
return False