Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erklärung und einfache Beispiele für Python-Getopt

Ausführliche Erklärung und einfache Beispiele für Python-Getopt

高洛峰
高洛峰Original
2017-02-11 13:19:391310Durchsuche

Dieser Artikel stellt hauptsächlich die detaillierte Erklärung und einfache Beispiele von Python-Getopt vor. Freunde, die es benötigen, können sich auf

Ausführliche Erklärung von Python-Getopt

Funktionsprototyp beziehen:

getopt.getopt(args, shortopts, longopts=[])

Parametererklärung:

  • args: args ist die Parameterliste, die analysiert werden muss. Verwenden Sie im Allgemeinen sys.argv[1:], das den ersten Parameter herausfiltern kann (ps: Der erste Parameter ist der Name des Skripts, er sollte nicht als Parameter analysiert werden)

  • shortopts: abgekürzte Parameterliste

  • longopts: lange Parameterliste

Rückgabewert:

  • opts: Die analysierten (Option, Wert) Listenpaare.

  • args: Liste der verbleibenden Befehlszeilenargumente, die keine Formatinformationen sind.

Quellcode-Analyse

Im Android-Build-System, das OTA generiert, wird die ParseOptions-Funktion in der Datei common.py zum Parsen der Eingabe verwendet Lassen Sie uns die Verwendung von getopt anhand der Implementierung dieser Funktion analysieren.

Der Funktionsquellcode lautet wie folgt:

def ParseOptions(argv, docstring, extra_opts="", extra_long_opts=(), extra_option_handler=None):
  try:
    opts, args = getopt.getopt(
      argv, "hvp:s:x" + extra_opts,
      ["help", "verbose", "path=", "signapk_path=", "extra_signapk_args=", "java_path=", "public_key_suffix=", "private_key_suffix=", "device_specific=", "extra="] + list(extra_long_opts))
  except getopt.GetoptError, err:
    Usage(docstring)
    print "**", str(err), "**"
    sys.exit(2)

  path_specified = False

  for o, a in opts:
    if o in ("-h", "--help"):
      Usage(docstring)
      sys.exit()
    elif o in ("-v", "--verbose"):
      OPTIONS.verbose = True
    elif o in ("-p", "--path"):
      OPTIONS.search_path = a
    elif o in ("--signapk_path",):
      OPTIONS.signapk_path = a
    elif o in ("--extra_singapk_args",):
      OPTIONS.extra_signapk_args = shlex.split(a)
    elif o in ("--java_path",):
      OPTIONS.java_path = a
    else:
      if extra_option_handler is None or not extra_option_handler(o, a):
      assert False, "unknown option \"%s\"" % (o,)

  os.environ["PATH"] = (os.path.join(OPTIONS.search_path, "bin") + os.pathsep + os.environ["PATH"])

  return args

Unter diesen kann extra_option_handler als Funktionszeiger und seine Funktion verstanden werden besteht auch darin, die Schlüssel-Wert-Paare von opts zu analysieren.

Der Quellcode von extra_option_handler lautet wie folgt:

 def option_handler(o, a):
  if o in ("-b", "--board_config"):
   pass  # deprecated
  elif o in ("-k", "--package_key"):
   OPTIONS.package_key = a
  elif o in ("-i", "--incremental_from"):
   OPTIONS.incremental_source = a
  elif o in ("-w", "--wipe_user_data"):
   OPTIONS.wipe_user_data = True
  elif o in ("-n", "--no_prereq"):
   OPTIONS.omit_prereq = True
  elif o in ("-e", "--extra_script"):
   OPTIONS.extra_script = a
  elif o in ("-a", "--aslr_mode"):
   if a in ("on", "On", "true", "True", "yes", "Yes"):
    OPTIONS.aslr_mode = True
   else:
    OPTIONS.aslr_mode = False
  elif o in ("--worker_threads"):
   OPTIONS.worker_threads = int(a)
  else:
   return False
  return True

Im Allgemeinen lautet der Parameter argv zum Generieren des OAT-Vollpakets wie folgt :

argv = ['-v', '-p', 'out/host/linux-xxx', '-k', 'build/target/product/security/testkey',
 'out/target/product/xxx/obj/PACKAGING/target_files_intermediates/xxx-target_files.zip', 
'out/target/product/xxx/xxx_20150723.1340-ota.zip']

Analysieren Sie zunächst die Parameter, wobei kurze Parameter Folgendes umfassen:

-v,-p,-k,

Nach der Analyse sind die generierten Ergebnisse schließlich wie folgt:

opts = [('-v', ''), ('-p', 'out/host/linux-x86'), 
('-k', 'build/target/product/security/testkey')]
args =['out/target/product/xxx/obj/PACKAGING/target_files_intermediates/xxx-target_files.zip',
 'out/target/product/xxx/xxx_20150723.1340-ota.zip']

Vielen Dank fürs Lesen, ich hoffe, es kann allen helfen, danke für Ihre Unterstützung dieser Seite!

Ausführlichere Erklärungen und einfache Beispiele für Python-Getopt finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn