def _print_execution_details(self, execution, args, **kwargs):
        """
        Print the execution detail to stdout.

        This method takes into account if an executed action was workflow or not
        and formats the output accordingly.
        """
        runner_type = execution.action.get("runner_type", "unknown")
        is_workflow_action = runner_type in WORKFLOW_RUNNER_TYPES

        show_tasks = getattr(args, "show_tasks", False)
        raw = getattr(args, "raw", False)
        detail = getattr(args, "detail", False)
        key = getattr(args, "key", None)
        attr = getattr(args, "attr", [])

        if show_tasks and not is_workflow_action:
            raise ValueError(
                "--show-tasks option can only be used with workflow actions"
            )

        if not raw and not detail and (show_tasks or is_workflow_action):
            self._run_and_print_child_task_list(
                execution=execution, args=args, **kwargs
            )
        else:
            instance = execution

            if detail:
                formatter = table.PropertyValueTable
            else:
                formatter = execution_formatter.ExecutionResult

            if detail:
                options = {"attributes": copy.copy(self.display_attributes)}
            elif key:
                options = {"attributes": ["result.%s" % (key)], "key": key}
            else:
                options = {"attributes": attr}

            options["json"] = args.json
            options["yaml"] = args.yaml
            options["with_schema"] = args.with_schema
            options[
                "attribute_transform_functions"
            ] = self.attribute_transform_functions
            self.print_output(instance, formatter, **options)

        Print the execution detail to stdout.

        This method takes into account if an executed action was workflow or not
        and formats the output accordingly.
        
st2client/st2client/commands/action.py