class_docstr: PythonExecutorOperator handles python class based executor's init and execution.
  
  Attributes:
    extra_flags: Extra flags that will pass to Python executors. It come from
      two sources in the order:
      1. The `extra_flags` set in the executor spec.
      2. The flags passed in when starting the program by users or by other
         systems.
      The interpretation of these flags relying on the executor implementation.
class_docstr_tok: ["PythonExecutorOperator","handles","python","class","based","executor","'s","init","and","execution",".","Attributes",":","extra_flags",":","Extra","flags","that","will","pass","to","Python","executors",".","It","come","from","two","sources","in","the","order",":","1",".","The","`","extra_flags","`","set","in","the","executor","spec",".","2",".","The","flags","passed","in","when","starting","the","program","by","users","or","by","other","systems",".","The","interpretation","of","these","flags","relying","on","the","executor","implementation","."]
docstr: Invokes executors given input from the Launcher.
  
  Args:
    execution_info: A wrapper of the details of this execution.
  
  Returns:
    The output from executor.
docstr_tok: ["Invokes","executors","given","input","from","the","Launcher",".","Args",":","execution_info",":","A","wrapper","of","the","details","of","this","execution",".","Returns",":","The","output","from","executor","."]
code: def run_executor(
      self, execution_info: data_types.ExecutionInfo
  ) -> execution_result_pb2.ExecutorOutput:
      """Invokes executors given input from the Launcher.
  
      Args:
        execution_info: A wrapper of the details of this execution.
  
      Returns:
        The output from executor.
      """
      context = base_executor.BaseExecutor.Context(
          extra_flags=self.extra_flags,
          tmp_dir=execution_info.tmp_dir,
          unique_id=str(execution_info.execution_id),
          executor_output_uri=execution_info.execution_output_uri,
          stateful_working_dir=execution_info.stateful_working_dir,
          pipeline_node=execution_info.pipeline_node,
          pipeline_info=execution_info.pipeline_info,
          pipeline_run_id=execution_info.pipeline_run_id,
      )
      executor = self._executor_cls(context=context)
      return run_with_executor(execution_info, executor)
  
file_path: tfx/tfx/orchestration/portable/python_executor_operator.py
imports: import copy
  import sys
  from typing import Optional, cast
  from tfx.dsl.components.base import base_executor
  from tfx.dsl.io import fileio
  from tfx.orchestration.portable import base_executor_operator
  from tfx.orchestration.portable import data_types
  from tfx.orchestration.portable import outputs_utils
  from tfx.proto.orchestration import executable_spec_pb2
  from tfx.proto.orchestration import execution_result_pb2
  from tfx.types.value_artifact import ValueArtifact
  from tfx.utils import import_utils
  from google.protobuf import message
label_desc: Use image node_id 2 for calling the PythonExecutorOperator obj's underlying member method code with example usage: obj.run_executor(execution_info) and returns: run_with_executor