def cmdshell(self, cmd, timeout=None, inpt=None, log_cmd=True): if timeout is None: timeout = conf['SHELL_COMMAND_TIMEOUT'] output = [] errors = [] execline = ' '.join(cmd) if log_cmd: display_cmd(self.logger, execline) p = Popen(execline, env=os.environ, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) try: if inpt: p.stdin = subprocess.PIPE out, err = p.communicate(input=bytes(inpt, 'utf-8'), timeout=timeout) else: out, err = p.communicate(timeout=timeout) except subprocess.TimeoutExpired: p.kill() out, err = p.communicate() if out: output = [ l.strip() for l in out.decode('utf-8').split('\n') if len(l) ] if log_cmd: display_cmd_output(self.logger, output) if err: errors = [l.strip() for l in err.decode().split('\n')] self.logger.debug("Errors: %r", errors) self.logger.debug("CMD return code: %r", p.returncode) return p.returncode, output, errors
def sshcmd(self, dst, cmd, inpt=None, timeout=None, log_cmd=True, term=False, display_errors=False, parse_output=True): # noqa if timeout is None: timeout = conf['SSH_CONNECT_TIMEOUT'] output = [] errors = [] ex = [ 'ssh', '-q', '-o UserKnownHostsFile=/dev/null', '-o StrictHostKeyChecking=no', '-o ConnectTimeout=%s' % timeout, dst ] if term: ex.insert(1, '-t') ex.extend(cmd) self.logger.debug("Execution list: %r", ex) if log_cmd: display_cmd(self.logger, ' '.join(ex)) sp = Popen(ex, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if inpt: sp.stdin = subprocess.PIPE out, err = sp.communicate(input=bytes(inpt, 'utf-8')) else: out, err = sp.communicate() if parse_output and out: output = [ self.replace_double_colon( self.remove_ansi_esc_chars( self.remove_non_printable_chars(l.strip()))) for l in out.decode('utf-8').split('\n') if len(l) ] if log_cmd and len(output): display_cmd_output(self.logger, output) if err: errors = [ l.strip() for l in err.decode('utf-8').split('\n') if l.strip() ] if display_errors: display_cmd_output(self.logger, errors) else: self.logger.debug("Errors: %r", errors) self.logger.debug("SSH CMD return code: %r", sp.returncode) return sp.returncode, output, errors