From dbe002ef640083d79a4ca525c246f8d9e561143d Mon Sep 17 00:00:00 2001 From: Rishabh Dave Date: Tue, 8 Dec 2020 14:10:43 +0530 Subject: [PATCH] vstart_runner: reuse code in LocalRemoteProcess Reduce duplication in LocalRemoteProcess.wait() and LocalRemoteProcess.finished() by moving the common code to a separate method and then using that separate method instead. Signed-off-by: Rishabh Dave --- qa/tasks/vstart_runner.py | 46 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/qa/tasks/vstart_runner.py b/qa/tasks/vstart_runner.py index 982dd6ed4ed..827602629ab 100644 --- a/qa/tasks/vstart_runner.py +++ b/qa/tasks/vstart_runner.py @@ -182,6 +182,22 @@ class LocalRemoteProcess(object): self.check_status = check_status self.exitstatus = self.returncode = None + 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: + pass + else: + self.stderr.write(err) + def wait(self): if self.finished: # Avoid calling communicate() on a dead process because it'll @@ -193,18 +209,8 @@ class LocalRemoteProcess(object): out, err = self.subproc.communicate() out, err = rm_nonascii_chars(out), rm_nonascii_chars(err) - 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 @@ -222,19 +228,11 @@ class LocalRemoteProcess(object): 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