Uso nargs='?'
(o nargs='*'
si necesitará 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
?
y*
significa lo mismo que significan en las expresiones regulares (es decir,?
requiere 0 o 1 y*
requiere 0 o más)? Si es así, ¿+
funciona también?+
funciona. Ver docs.python.org/2/library/argparse.html#nargs para más detalles.options.dir
, noargs.dir
, como estaba intentando!Como una extensión a la respuesta @VinaySajip. Hay otros que
nargs
vale la pena mencionar .parser.add_argument('dir', nargs=1, default=os.getcwd())
N (un entero). N argumentos de la línea de comando se reunirán en una lista
parser.add_argument('dir', nargs='*', default=os.getcwd())
'*'. Todos los argumentos de la línea de comandos presentes se agrupan en una lista. Tenga en cuenta que generalmente no tiene mucho sentido tener más de un argumento posicional con
nargs='*'
, peronargs='*'
es posible tener múltiples argumentos opcionales con .parser.add_argument('dir', nargs='+', default=os.getcwd())
'+'. Al igual que '*', todos los argumentos de línea de comandos 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.
parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())
argparse.REMAINDER
. Todos los argumentos restantes de la línea de comandos 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 comandosSi
nargs
no se proporciona el argumento de la palabra clave, la acción determina el número de argumentos consumidos. En general, esto significa que se consumirá un único argumento de línea de comandos y se generará un único elemento (no una lista).Editar (copiado de un comentario de @Acumenus)
nargs='?'
Los documentos dicen: '?'. Si es posible, se consumirá un argumento desde la línea de comando y se generará como un solo elemento. Si no hay ningún argumento de línea de comando, se generará el valor predeterminado.fuente
nargs='?'
no produce una lista.Generally this means a single command-line argument will be consumed and a single item (not a list) will be produced.
Espero que esto ayude ...nargs
, pero lonargs='?'
está definiendo. Los documentos dicen: '?'. Si es posible, se consumirá un argumento desde la línea de comando y se generará como un solo elemento. Si no hay ningún argumento de línea de comando, se generará el valor predeterminado.nargs=argparse.REMAINDER
ynargs='*'
, como me parece, son idénticos en su efecto (probado en Python 2.7.10 y Python 3.6.1)?parser.add_argument
También tiene un interruptor requerido . Puedes usarrequired=False
. Aquí hay un fragmento de muestra con Python 2.7:fuente