code: def _run(java_options, options, path=None, encoding='utf-8'):
      
      # Workaround to enforce the silent option. See:
      # https://github.com/tabulapdf/tabula-java/issues/231#issuecomment-397281157
      if 'silent' in options:
          java_options.extend((
              '-Dorg.slf4j.simpleLogger.defaultLogLevel=off',
              '-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog',
          ))
  
      built_options = build_options(options)
      args = ["java"] + java_options + ["-jar", _jar_path()] + built_options
      if path:
          args.append(path)
  
      try:
          return subprocess.check_output(args)
      except FileNotFoundError as e:
          raise JavaNotFoundError(JAVA_NOT_FOUND_ERROR)
      except subprocess.CalledProcessError as e:
          sys.stderr.write("Error: {}\n".format(e.output.decode(encoding)))
          raise
docs: Call tabula-java with the given lists of Java options and tabula-py
      options, as well as an optional path to pass to tabula-java as a regular
      argument and an optional encoding to use for any required output sent to
      stderr.
  
      tabula-py options are translated into tabula-java options, see
      :func:`build_options` for more information.