Maison  >  Article  >  développement back-end  >  Explication détaillée et exemples simples de python getopt

Explication détaillée et exemples simples de python getopt

高洛峰
高洛峰original
2017-02-11 13:19:391244parcourir

Cet article présente principalement l'explication détaillée et des exemples simples de python getopt. Les amis qui en ont besoin peuvent se référer à

Explication détaillée de python getopt

Prototype de fonction :

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

Explication des paramètres :

  • args : args est la liste de paramètres qui doit être analysée. Utilisez généralement sys.argv[1:], qui peut filtrer le premier paramètre (ps : le premier paramètre est le nom du script, il ne doit pas être analysé comme un paramètre)

  • shortopts : liste de paramètres abrégée

  • longopts : liste de paramètres longue

Valeur de retour :

  • opts : les paires de listes analysées (option, valeur).

  • args : Liste des arguments de ligne de commande restants qui ne sont pas des informations de format.

Analyse du code source

Dans le système de build Android qui génère OTA, la fonction ParseOptions du fichier common.py est utilisée pour analyser l'entrée paramètres , analysons l'utilisation de getopt à travers l'implémentation de cette fonction.

Le code source de la fonction est le suivant :

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

Parmi eux, extra_option_handler peut être compris comme un pointeur de fonction, et sa fonction consiste également à analyser les paires clé-valeur de opts .

Le code source extra_option_handler est le suivant :

 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

Généralement, le paramètre argv pour générer le package complet OAT est le suivant :

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']

Tout d'abord, analysez les paramètres, où les paramètres courts incluent :

-v,-p,-k,

Après analyse Finalement, les résultats générés sont les suivants :

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']

Merci d'avoir lu, j'espère que cela pourra aider tout le monde, merci pour votre soutien à ce site !

Pour des explications plus détaillées et des exemples simples de python getopt, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn