Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

339
Views
Python `argparse`: ¿Existe una forma limpia de agregar una bandera que establezca múltiples banderas (por ejemplo, `--all`" es equivalente a `--x --y`)

Tengo un código de procesamiento de línea de comandos de Python argparse que inicialmente se veía así:

 import argparse ap = argparse.ArgumentParser() ap.add_argument("--x", help = "Set `x`.", action = "store_true", default = False) ap.add_argument("--y", help = "Set `y`.", action = "store_true", default = False) ap.add_argument( "--all", help = "Equivalent to `--x --y`.", action = "store_true", default = False ) args = ap.parse_args() if args.all: args.x = True args.y = True print "args.x", args.x print "args.y", args.y

La idea básica: tengo algunas banderas booleanas que alternan en una configuración particular ( --x , --y , etc.), y quiero agregar una opción conveniente que alterna varias configuraciones, por ejemplo, --all es equivalente a --x --y .

Quería evitar tener una lógica de procesamiento de línea de comandos que no estuviera contenida en ArgumentParser y hecha en parse_args , así que se me ocurrió esta solución usando argparse.Action s personalizados:

 import argparse def store_const_multiple(const, *destinations): """Returns an `argparse.Action` class that sets multiple argument destinations (`destinations`) to `const`.""" class store_const_multiple_action(argparse.Action): def __init__(self, *args, **kwargs): super(store_const_multiple_action, self).__init__( metavar = None, nargs = 0, const = const, *args, **kwargs ) def __call__(self, parser, namespace, values, option_string = None): for destination in destinations: setattr(namespace, destination, const) return store_const_multiple_action def store_true_multiple(*destinations): """Returns an `argparse.Action` class that sets multiple argument destinations (`destinations`) to `True`.""" return store_const_multiple(True, *destinations) ap = argparse.ArgumentParser() ap.add_argument("--x", help = "Set `x`.", action = "store_true", default = False) ap.add_argument("--y", help = "Set `y`.", action = "store_true", default = False) ap.add_argument( "--all", help = "Equivalent to `--x --y`.", action = store_true_multiple("x", "y") ) args = ap.parse_args() print "args.x", args.x print "args.y", args.y

¿Hay alguna forma limpia de lograr lo que quiero con argparse sin (0) hacer algún procesamiento después de parse_args() (primer ejemplo) o (2) escribir un argparse.Action personalizado (segundo ejemplo)?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Esto es tarde y no es exactamente lo que querías, pero aquí hay algo que puedes probar:

 import argparse myflags = ['x', 'y', 'z'] parser = argparse.ArgumentParser() parser.add_argument('--flags', nargs="+", choices=myflags) parser.add_argument('--all-flags', action='store_const', const=myflags, dest='flags') args = parser.parse_args() print(args)

Luego, llamar a python myscript.py --flags xy genera esto

Namespace(flags=['x', 'y'])

Y llamar a python myscript.py --all-flags genera esto

Namespace(flags=['x', 'y', 'z'])

Pero tendrá que verificar sus banderas a través 'x' in args.flags lugar de simplemente args.x

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!