Ir para o conteúdo

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