Use nargs='?'
(ou nargs='*'
se você precisar de mais de um diretório)
parser.add_argument('dir', nargs='?', default=os.getcwd())
exemplo estendido:
>>> 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
?
e*
significa o mesmo que eles significam em expressões regulares (isto é,?
requer 0 ou 1 e*
requer 0 ou mais)? Se sim, também+
funciona?+
funciona. Consulte docs.python.org/2/library/argparse.html#nargs para obter detalhes.options.dir
, nãoargs.dir
, como eu estava tentando!Como uma extensão da resposta @VinaySajip. Há adicional
nargs
vale a pena mencionar .parser.add_argument('dir', nargs=1, default=os.getcwd())
N (um número inteiro). N argumentos da linha de comando serão reunidos em uma lista
parser.add_argument('dir', nargs='*', default=os.getcwd())
'*'. Todos os argumentos da linha de comando presentes são reunidos em uma lista. Observe que geralmente não faz muito sentido ter mais de um argumento posicional
nargs='*'
, mas vários argumentos opcionaisnargs='*'
são possíveis.parser.add_argument('dir', nargs='+', default=os.getcwd())
'+'. Assim como '*', todos os argumentos de linha de comando presentes são reunidos em uma lista. Além disso, uma mensagem de erro será gerada se não houver pelo menos um argumento de linha de comando presente.
parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())
argparse.REMAINDER
. Todos os demais argumentos da linha de comando são reunidos em uma lista. Isso é geralmente útil para utilitários de linha de comando que são enviados para outros utilitários de linha de comandoSe o
nargs
argumento palavra chave não for fornecido, o número de argumentos consumidos será determinado pela ação. Geralmente, isso significa que um único argumento de linha de comando será consumido e um único item (não uma lista) será produzido.Editar (copiado de um comentário por @Acumenus)
nargs='?'
Os documentos dizem: '?'. Um argumento será consumido na linha de comando, se possível, e produzido como um único item. Se nenhum argumento da linha de comando estiver presente, o valor do padrão será produzido.fonte
nargs='?'
não produz uma lista.Generally this means a single command-line argument will be consumed and a single item (not a list) will be produced.
Espero que ajude ...nargs
, masnargs='?'
está definindo-o. Os documentos dizem: '?'. Um argumento será consumido na linha de comando, se possível, e produzido como um único item. Se nenhum argumento da linha de comando estiver presente, o valor do padrão será produzido.nargs=argparse.REMAINDER
enargs='*'
, como me parece, eles são idênticos em seus efeitos (testados no Python 2.7.10 e Python 3.6.1)?parser.add_argument
também possui uma chave necessária . Você pode usarrequired=False
. Aqui está um trecho de amostra com o Python 2.7:fonte