def _run_helper(self, final_cmd, with_output=False, exit_on_fail=False, silent=False): """Run a command that was already setup with SSH and `bash` settings. Args: cmd (List[str]): Full command to run. Should include SSH options and other processing that we do. with_output (bool): If `with_output` is `True`, command stdout and stderr will be captured and returned. exit_on_fail (bool): If `exit_on_fail` is `True`, the process will exit if the command fails (exits with a code other than 0). Raises: ProcessRunnerError if using new log style and disabled login shells. click.ClickException if using login shells. """ try: # For now, if the output is needed we just skip the new logic. # In the future we could update the new logic to support # capturing output, but it is probably not needed. if not cli_logger.old_style and not with_output: return run_cmd_redirected( final_cmd, process_runner=self.process_runner, silent=silent, use_login_shells=is_using_login_shells()) if with_output: return self.process_runner.check_output(final_cmd) else: return self.process_runner.check_call(final_cmd) except subprocess.CalledProcessError as e: quoted_cmd = " ".join(final_cmd[:-1] + [quote(final_cmd[-1])]) if not cli_logger.old_style and not is_using_login_shells(): raise ProcessRunnerError("Command failed", "ssh_command_failed", code=e.returncode, command=quoted_cmd) if exit_on_fail: raise click.ClickException( "Command failed:\n\n {}\n".format(quoted_cmd)) from None else: fail_msg = "SSH command failed." if is_output_redirected(): fail_msg += " See above for the output from the failure." raise click.ClickException(fail_msg) from None
if not cli_logger.old_style and not with_output: return run_cmd_redirected( final_cmd, process_runner=self.process_runner, silent=silent, use_login_shells=is_using_login_shells()) if with_output: return self.process_runner.check_output(final_cmd) else: return self.process_runner.check_call(final_cmd) except subprocess.CalledProcessError as e: quoted_cmd = " ".join(final_cmd[:-1] + [quote(final_cmd[-1])]) if not cli_logger.old_style and not is_using_login_shells(): raise ProcessRunnerError( "Command failed", "ssh_command_failed", code=e.returncode, command=quoted_cmd) if exit_on_fail: raise click.ClickException( "Command failed:\n\n {}\n".format(quoted_cmd)) from None else: fail_msg = "SSH command failed." if is_output_redirected(): fail_msg += " See above for the output from the failure." raise click.ClickException(fail_msg) from None def run( self, cmd,