code: def _get_input_for_run(args, executable, preset_inputs=None, input_name_prefix=None):
      
      # The following may throw if the executable is a workflow with no
      # input spec available (because a stage is inaccessible)
      exec_inputs = try_call(ExecutableInputs,
                             executable,
                             input_name_prefix=input_name_prefix,
                             active_region=args.region)
  
      # Use input and system requirements from a cloned execution
      if args.input_json is None and args.filename is None:
          # --input-json and --input-json-file completely override input
          # from the cloned job
          exec_inputs.update(args.input_from_clone, strip_prefix=False)
  
      # Update with inputs passed to the this function
      if preset_inputs is not None:
          exec_inputs.update(preset_inputs, strip_prefix=False)
  
      # Update with inputs passed with -i, --input_json, --input_json_file, etc.
      # If batch_tsv is set, do not prompt for missing arguments
      require_all_inputs = (args.batch_tsv is None)
      try_call(exec_inputs.update_from_args, args, require_all_inputs)
  
      return exec_inputs.inputs
docs: Returns an input dictionary that can be passed to executable.run()