Além disso, a versão antiga ignora todos os argumentos não reconhecidos e continua. Na maioria das situações, isso não é o ideal e foi alterado em argparse. Mas há algumas situações em que você deseja ignorar qualquer argumento não reconhecido e analisar os que você especificou.
Por exemplo:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()
$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar
Existe alguma maneira de substituir isso?
Respostas:
Substituir
com
Por exemplo,
fonte
parse_known_args
parser.parse_args(None)
mais do queparser.parse_args([])
nos meus testes.parse_known_args
vez de permitirparse_args
o uso deArgumentParser
código dentro do escopo deif __name__ == 'main':
(uma condição que éTrue
para todas as células em um Notebook IPython ... que eu acho que ajuda muito no código de desenvolvimento e teste que eu quero migrar para um script chamado a partir de uma linha de comando)Você pode colocar as partes restantes em um novo argumento
parser.add_argument('args', nargs=argparse.REMAINDER)
se quiser usá-las.fonte
parse_args()
e não requerparse_known_args()
(no Python 2.7).Na verdade, o argparse ainda "ignora"
_unrecognized_args
. Contanto que esses argumentos "não reconhecidos" não usem o prefixo padrão, você não ouvirá reclamações do analisador.Usando a configuração do @ anutbu, mas com o padrão
parse.parse_args()
, se executássemos nosso programa com os seguintes argumentos.Teremos essa coleta de dados com espaço para nome para trabalhar.
Se quiséssemos
-
ignorar o prefixo padrão , poderíamos alterar o ArgumentParser e decidir que usaríamos um+
para nossos argumentos "reconhecidos".O mesmo comando produzirá
Coloque isso no seu cachimbo e fume =)
nJoy!
fonte