Sets the environment variables for the executable, runs the executable,
    and handles the output.

def run_command(nova_creds, nova_args, supernova_args):
    """
    Sets the environment variables for the executable, runs the executable,
    and handles the output.
    """
    nova_env = supernova_args['nova_env']
    # (gtmanfred) make a copy of this object.  If we don't copy it, the insert
    # to 0 happens multiple times because it is the same object in memory.
    nova_args = copy.copy(nova_args)

    # Get the environment variables ready
    env_vars = os.environ.copy()
    env_vars.update(credentials.prep_shell_environment(nova_env,
                                                       nova_creds))

    # BYPASS_URL is a weird one, so we need to send it as an argument,
    # not an environment variable.
    nova_args = check_for_bypass_url(nova_creds[nova_env], nova_args)

    # Check for OS_EXECUTABLE
    supernova_args = check_for_executable(supernova_args, env_vars)

    # Check for a debug override
    nova_args = check_for_debug(supernova_args, nova_args)

    # Print a small message for the user (very helpful for groups)
    msg = "Running %s against %s..." % (supernova_args.get('executable'),
                                        nova_env)
    if not supernova_args.get('quiet'):
        click.echo("[%s] %s " % (click.style('SUPERNOVA', fg='green'), msg))

    # Call executable and connect stdout to the current terminal
    # so that any unicode characters from the executable's list will be
    # displayed appropriately.
    #
    # In other news, I hate how python 2.6 does unicode.
    nova_args.insert(0, supernova_args['executable'])
    nova_args = [nova_arg.strip() for nova_arg in nova_args]
    process = execute_executable(nova_args, env_vars)

    # If the user asked us to be quiet, then let's not print stderr
    if not supernova_args.get('quiet'):
        handle_stderr(process.stderr)

    return process.returncode