A argparse
documentação é razoavelmente boa, mas deixa de fora alguns detalhes úteis que podem não ser óbvios. (@ Diego Navarro já mencionou um pouco disso, mas tentarei expandir um pouco sua resposta.) O uso básico é o seguinte:
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--my-foo', default='foobar')
parser.add_argument('-b', '--bar-value', default=3.14)
args = parser.parse_args()
O objeto do qual você volta parse_args()
é um objeto 'Namespace': um objeto cujas variáveis de membro são nomeadas após os argumentos da linha de comando. O Namespace
objetivo é como você acessa seus argumentos e os valores associados a eles:
args = parser.parse_args()
print args.my_foo
print args.bar_value
(Observe que argparse
substitui '-' nos nomes dos argumentos por sublinhados ao nomear as variáveis.)
Em muitas situações, você pode querer usar argumentos simplesmente como sinalizadores que não têm valor. Você pode adicionar aqueles no argparse assim:
parser.add_argument('--foo', action='store_true')
parser.add_argument('--no-foo', action='store_false')
O exemplo acima criará variáveis nomeadas 'foo' com o valor True e 'no_foo' com o valor False, respectivamente:
if (args.foo):
print "foo is true"
if (args.no_foo is False):
print "nofoo is false"
Observe também que você pode usar a opção "obrigatório" ao adicionar um argumento:
parser.add_argument('-o', '--output', required=True)
Dessa forma, se você omitir esse argumento na linha de comando argparse
, ele faltará e interromperá a execução do seu script.
Por fim, observe que é possível criar uma estrutura de ditado para seus argumentos usando a vars
função, se isso facilitar a vida para você.
args = parser.parse_args()
argsdict = vars(args)
print argsdict['my_foo']
print argsdict['bar_value']
Como você pode ver, vars
retorna um ditado com seus nomes de argumento como chaves e seus valores como, er, valores.
Existem muitas outras opções e coisas que você pode fazer, mas isso deve abranger os cenários de uso comuns mais essenciais.
sys.argv
para o argumento que quiser ...