code: def run_baton_query(self, baton_binary: BatonBinary, program_arguments: List[str]=None, input_data: Any=None) \
              -> List[Dict]:
          
          if program_arguments is None:
              program_arguments = []
  
          baton_binary_location = os.path.join(self._baton_binaries_directory, baton_binary.value)
          program_arguments = [baton_binary_location] + program_arguments
  
          _logger.info("Running baton command: '%s' with data '%s'" % (program_arguments, input_data))
          start_at = time.monotonic()
          baton_out = self._run_command(program_arguments, input_data=input_data)
          time_taken_to_run_query = time.monotonic() - start_at
          _logger.debug("baton output (took %s seconds, wall time): %s" % (time_taken_to_run_query, baton_out))
  
          if len(baton_out) == 0:
              return []
          if len(baton_out) > 0 and baton_out[0] != '[':
              # If information about multiple files is returned, baton does not return valid JSON - it returns a line
              # separated list of JSON, where each line corresponds to a different file
              baton_out = "[%s]" % baton_out.replace('\n', ',')
  
          baton_out_as_json = json.loads(baton_out)
          BatonRunner._raise_any_errors_given_in_baton_out(baton_out_as_json)
  
          return baton_out_as_json
docs: Runs a baton query.
          :param baton_binary: the baton binary to use
          :param program_arguments: arguments to give to the baton binary
          :param input_data: input data to the baton binary
          :return: parsed serialization returned by baton