usage mutually float exclusive example argumentparser argument add_argument python argparse

python - mutually - Argparse opcional argumentos posicionales?



mutually exclusive args argparse (3)

Como una extensión a la respuesta @VinaySajip. Hay nargs adicionales que nargs pena mencionar .

  1. parser.add_argument(''dir'', nargs=1, default=os.getcwd())

N (un entero). Los argumentos N de la línea de comando se reunirán en una lista

  1. parser.add_argument(''dir'', nargs=''*'', default=os.getcwd())

''*''. Todos los argumentos de línea de comando presentes se agrupan en una lista. Tenga en cuenta que generalmente no tiene mucho sentido tener más de un argumento posicional con nargs=''*'' , pero es posible tener múltiples argumentos opcionales con nargs=''*'' .

  1. parser.add_argument(''dir'', nargs=''+'', default=os.getcwd())

''+''. Al igual que ''*'', todos los argumentos de línea de comando presentes se agrupan en una lista. Además, se generará un mensaje de error si no hubiera al menos un argumento de línea de comando presente.

  1. parser.add_argument(''dir'', nargs=argparse.REMAINDER, default=os.getcwd())

argparse.REMAINDER . Todos los argumentos de línea de comando restantes se agrupan en una lista. Esto suele ser útil para las utilidades de línea de comandos que se envían a otras utilidades de línea de comandos

Si no se proporciona el argumento de la palabra clave nargs , la acción determina el número de argumentos consumidos. En general, esto significa que se consumirá un solo argumento de línea de comando y se producirá un solo elemento (no una lista).

Tengo un script destinado para ser usado de esta manera: usage: installer.py dir [-h] [-v]

dir es un argumento posicional que se define así:

parser.add_argument(''dir'', default=os.getcwd())

Quiero que el dir sea ​​opcional: cuando no se especifica, solo debería ser cwd .

Desafortunadamente, cuando no especifico el argumento dir , obtengo Error: Too few arguments .


Use nargs=''?'' (o nargs=''*'' si necesita más de un directorio)

parser.add_argument(''dir'', nargs=''?'', default=os.getcwd())

ejemplo extendido

>>> import os, argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument(''-v'', action=''store_true'') _StoreTrueAction(option_strings=[''-v''], dest=''v'', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None) >>> parser.add_argument(''dir'', nargs=''?'', default=os.getcwd()) _StoreAction(option_strings=[], dest=''dir'', nargs=''?'', const=None, default=''/home/vinay'', type=None, choices=None, help=None, metavar=None) >>> parser.parse_args(''somedir -v''.split()) Namespace(dir=''somedir'', v=True) >>> parser.parse_args(''-v''.split()) Namespace(dir=''/home/vinay'', v=True) >>> parser.parse_args(''''.split()) Namespace(dir=''/home/vinay'', v=False) >>> parser.parse_args([''somedir'']) Namespace(dir=''somedir'', v=False) >>> parser.parse_args(''somedir -h -v''.split()) usage: [-h] [-v] [dir] positional arguments: dir optional arguments: -h, --help show this help message and exit -v


parser.add_argument también tiene un interruptor requerido . Puedes usar required=False . Aquí hay un fragmento de muestra con Python 2.7:

parser = argparse.ArgumentParser(description=''get dir'') parser.add_argument(''--dir'', type=str, help=''dir'', default=os.getcwd(), required=False) args = parser.parse_args()