code: def _run_command(self, arguments: List[str], input_data: Any=None, output_encoding: str="utf-8") -> str:
          
          process = subprocess.Popen(arguments, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
  
          if isinstance(input_data, List):
              for to_write in input_data:
                  to_write_as_json = json.dumps(to_write)
                  process.stdin.write(str.encode(to_write_as_json))
              input_data = None
          else:
              input_data = str.encode(json.dumps(input_data))
  
          timeout_in_seconds = self.timeout_queries_after.total_seconds() if self.timeout_queries_after is not None \
              else None
          out, error = process.communicate(input=input_data, timeout=timeout_in_seconds)
          if len(out) == 0 and len(error) > 0:
              raise RuntimeError(error)
  
          return out.decode(output_encoding).rstrip()
docs: Run a command as a subprocess.
  
          Ignores errors given over stderr if there is output on stdout (this is the case where baton has been run
          correctly and has expressed the error in it's JSON out, which can be handled more appropriately upstream to this
          method.)
          :param arguments: the arguments to run
          :param input_data: the input data to pass to the subprocess
          :param output_encoding: optional specification of the output encoding to expect
          :return: the process' standard out