def _do_run(cmd, checks, log_stdout=False): """Perform running and check results, raising errors for issues. """ cmd, shell_arg, executable_arg = _normalize_cmd_args(cmd) s = subprocess.Popen(cmd, shell=shell_arg, executable=executable_arg, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) debug_stdout = collections.deque(maxlen=100) with contextlib.closing(s.stdout) as stdout: while 1: line = stdout.readline() if line: debug_stdout.append(line) if log_stdout: logger_stdout.debug(line.rstrip()) else: logger.debug(line.rstrip()) exitcode = s.poll() if exitcode is not None: if exitcode is not None and exitcode != 0: error_msg = " ".join(cmd) if not isinstance(cmd, basestring) else cmd error_msg += "\n" error_msg += "".join(debug_stdout) raise subprocess.CalledProcessError(exitcode, error_msg) else: break # Check for problems not identified by shell return codes if checks: for check in checks: if not check(): raise IOError("External command failed")
def _do_run(cmd, checks, log_stdout=False): """Perform running and check results, raising errors for issues. """ cmd, shell_arg, executable_arg = _normalize_cmd_args(cmd) s = subprocess.Popen(cmd, shell=shell_arg, executable=executable_arg, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) debug_stdout = collections.deque(maxlen=100) with contextlib.closing(s.stdout) as stdout: while 1: line = stdout.readline() if line: debug_stdout.append(line) if log_stdout: logger_stdout.debug(line.rstrip()) else: logger.debug(line.rstrip()) exitcode = s.poll() if exitcode is not None: if exitcode is not None and exitcode != 0: error_msg = " ".join(cmd) if not isinstance( cmd, basestring) else cmd error_msg += "\n" error_msg += "".join(debug_stdout) raise subprocess.CalledProcessError(exitcode, error_msg) else: break # Check for problems not identified by shell return codes if checks: for check in checks: if not check(): raise IOError("External command failed")
def _do_run(cmd, checks, log_stdout=False, env=None): """Perform running and check results, raising errors for issues. """ cmd, shell_arg, executable_arg = _normalize_cmd_args(cmd) s = subprocess.Popen( cmd, shell=shell_arg, executable=executable_arg, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True, env=env, ) debug_stdout = collections.deque(maxlen=100) while 1: line = s.stdout.readline().decode("utf-8", errors="replace") if line.rstrip(): debug_stdout.append(line) if log_stdout: logger_stdout.debug(line.rstrip()) else: logger.debug(line.rstrip()) exitcode = s.poll() if exitcode is not None: for line in s.stdout: debug_stdout.append(line.decode("utf-8", errors="replace")) if exitcode is not None and exitcode != 0: error_msg = " ".join(cmd) if not isinstance( cmd, six.string_types) else cmd error_msg += "\n" error_msg += "".join(debug_stdout) s.communicate() s.stdout.close() raise subprocess.CalledProcessError(exitcode, error_msg) else: break s.communicate() s.stdout.close() # Check for problems not identified by shell return codes if checks: for check in checks: if not check(): raise IOError("External command failed")
def _do_run(cmd, checks, log_stdout=False, env=None): """Perform running and check results, raising errors for issues. """ cmd, shell_arg, executable_arg = _normalize_cmd_args(cmd) s = subprocess.Popen( cmd, shell=shell_arg, executable=executable_arg, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True, env=env, ) debug_stdout = collections.deque(maxlen=100) while 1: line = s.stdout.readline().decode("utf-8", errors="replace") if line.rstrip(): debug_stdout.append(line) if log_stdout: logger_stdout.debug(line.rstrip()) else: logger.debug(line.rstrip()) exitcode = s.poll() if exitcode is not None: for line in s.stdout: debug_stdout.append(line.decode("utf-8", errors="replace")) if exitcode is not None and exitcode != 0: error_msg = " ".join(cmd) if not isinstance(cmd, six.string_types) else cmd error_msg += "\n" error_msg += "".join(debug_stdout) s.communicate() s.stdout.close() raise subprocess.CalledProcessError(exitcode, error_msg) else: break s.communicate() s.stdout.close() # Check for problems not identified by shell return codes if checks: for check in checks: if not check(): raise IOError("External command failed")