Source code for sceptre.hooks.cmd

import subprocess
from sceptre.hooks import Hook
from sceptre.exceptions import InvalidHookArgumentTypeError


[docs]class Cmd(Hook): """ Cmd implements a Sceptre hook which can run arbitrary commands. """ def __init__(self, *args, **kwargs): super(Cmd, self).__init__(*args, **kwargs)
[docs] def run(self): """ Executes a command through the shell. See hooks documentation for details. :raises: sceptre.exceptions.InvalidHookArgumentTypeError invalid input :raises: CalledProcessError failed command :raises: FileNotFoundError missing shell :raises: PermissionError non-executable shell """ envs = self.stack.connection_manager.create_session_environment_variables() command_to_run = None shell = None if isinstance(self.argument, dict): command_to_run = self.argument.get("run") shell = self.argument.get("shell") else: command_to_run = self.argument if not isinstance(command_to_run, str) or command_to_run == "": raise InvalidHookArgumentTypeError( "A cmd hook requires either a string argument or an object with " f"a `run` key and a string value. You gave `{self.argument!r}`." ) if shell is not None and not isinstance(shell, str) or shell == "": raise InvalidHookArgumentTypeError( "A cmd hook requires a `shell` key with a non-empty string. " f"You gave `{self.argument!r}`." ) subprocess.check_call(command_to_run, shell=True, env=envs, executable=shell)