Argumentos linha comando
Argumentos de linha de comando
Argumentos de linha de comando são palavras escritas após o nome do programa.
Exemplos de argumentos de linha de comando:
Terminal> python meuProg.py arg1 arg2 arg3 ...
Terminal> cp -r seuDir ../meuDir
Terminal> ls -l
Programas Unix (rm, ls, cp, ...) faz o uso pesado de argumentos de linha de comando, nós vamos fazer o mesmo.
Como usar argumentos de linha de comando
Usando argumentos de linha de comando em nosso programa de exemplo
C = 21; F = (9.0/5)*C + 32; print F
O usuário quer especificar C como um argumento de linha de comando:
Terminal> python c2f_cml.py 21
69.8
Argumentos de linha de comando são "palavras" após o nome do arquivo do programa e são armazenadas em uma lista que pode ser acessada com sys.argv
:
import sys
C = float(sys.argv[1]) #lê o primeiro argumento de linha de comando
F = 9.0*C/5 + 32
print F
Argumentos de linha de comando são separados por espaços
Um outro exemplo:
import sys; print sys.argv[1:]
Demonstração:
Terminal> python print_cml.py 21 cadeia de caracteres 1.3
['21', 'cadeia', 'de', 'caracteres', '1.3']
Terminal> python print_cml.py 21 "cadeia de caracteres" 1.3
['21', 'string with blanks', '1.3']
Notas:
- Use aspas, como em "cadeia de caracteres" para sobrescrever a regra de separar argumentos de linha de comando com espaços;
- Todos os elementos da lista estão entre aspas, mostrando que os argumentos de linha de comando são cadeias de caracteres.
Exemplo lendo 4 parâmetros da linha de comando
Dados de entrada: $ s_0 $ (posição inicial), $ v_0 $ (velocidade inicial), $ a $ (aceleração constante) e $ t $ (tempo)
Dados de saída: $ s $ (posição atual)
Programa:
import sys
s0 = float(sys.argv[1])
v0 = float(sys.argv[2])
a = float(sys.argv[3])
t = float(sys.argv[4])
s = s0 + v0*t + 0.5*a*t*t
print s
Salve como posicao_lcm.py
Especifique $ s_0=1 $ m, $ v_0=1 $ m/s, $ a=0.5 $ $ \hbox{m/s}^2$, e $ t=3 $ s na linha de comando:
Terminal> python posicao_lcm.py 1 1 0.5 3
6.25
Argumentos da linha de comando com opções
Muitos programas, especialmente em sistemas Unix, requerem uma série de argumentos de linha de comando na forma
--opção valor
Terminal> python posicao_lcm.py --v0 1 --t 3 --s0 1 --a 0.5
Terminal> python posicao_lcm.py --t 3
A última chamada usa os valores padrão para v0
, s0
e a
, nos apenas entramos com os valores que desejamos mudar.
Os pares opção-valor tornam mais fácil de entender o que a entrada é (como os argumentos palavra-chave).
Programando pares de argumentos opção valor com o argparse
import argparse
parser = argparse.ArgumentParser()
## definindo os argumentos de linha de comando
parser.add_argument('--v0', '--velocidade_inicial', type=float,
default=0.0, help='velocidade inicial')
parser.add_argument('--s0', '--posicao_inicial', type=float,
default=0.0, help='posição inicial')
parser.add_argument('--a', '--aceleracao', type=float,
default=1.0, help='aceleração')
parser.add_argument('--t', '--tempo', type=float,
default=1.0, help='tempo')
## lendo os argumentos de linha de comando e interpretando
args = parser.parse_args()
## extraindo valores
s = args.s0 + args.v0*args.t + 0.5*args.a*args.t**2
## ou
s0 = args.s0; v0 = args.v0; a = args.a; t = args.t
s = s0 + v0*t + 0.5*a*t**2
O programa possui argumentos longo e curtos:
Terminal> python posicao_lcm.py --v0 1.2 --t 0.2
Terminal> python posicao_lcm.py --velocidade_inicial 1.2 --tempo 0.2