Pergunta
Eu tenho uma função:
def x(a,b,c)
Como posso coletar valores de variáveis da linha de comando que se enquadram nesse padrão?
python test.py --x_center a --y_center b c
(c
tem, por exemplo, 3, 4 ou mais valores)
Solução
Você pode fazer algo assim:
import argparse
def x(x_center, y_center, values):
print "X center:", x_center
print "Y center:", y_center
print "Values:", values
def main():
parser = argparse.ArgumentParser(description="Do something.")
parser.add_argument('-x', '--x-center', type=float, required=True)
parser.add_argument('-y', '--y-center', type=float, required=True)
parser.add_argument('values', type=float, nargs='*')
args = parser.parse_args()
x(args.x_center, args.y_center, args.values)
if __name__ == '__main__':
main()
Experimente:
$ python test.py --x-center 1 --y-center 2 3 4 5
X center: 1.0
Y center: 2.0
Values: [3.0, 4.0, 5.0]
Usar o argparse
módulo, normalmente você desejará começar com um main
função (e algum padrão que a chama).No main
função, você vai querer criar um ArgumentParser
.Depois disso, você desejará adicionar alguns argumentos.
Para adicionar um argumento, você usa add_argument
.
parser.add_argument('-x', '--x-center', type=float, required=True)
Aqui, estamos adicionando uma opção, -x
, que também tem uma variante de opção longa, --x-center
.O type
nós passamos para add_argument
diz para exigir que seja um float
(e erro se não for um float válido).Também contamos argparse
que é necessário;se não for fornecido, erro.
parser.add_argument('values', type=float, nargs='*')
É como antes, mas como a string que passamos para ele não começa com um travessão, ele assume que não é uma opção, mas sim um argumento de não opção.Mais uma vez, dizemos que queremos float
S. nargs
permite que você especifique que é necessário mais de um argumento. *
especifica que queremos qualquer quantidade de argumentos.
Finalmente, analisamos a linha de comando com parse_args
.Isso retorna um objeto que armazenaremos.
Você pode então acessar as opções e argumentos nesse args
objeto e faça coisas relevantes em seu programa.