Argumentos da linha de comando

Como é comum em programas de linha de comando em sistemas baseados em UNIX, é muito útil que nossos programas possuam uma “interface” de linha de comando, de forma que o usuário possa fornecer entradas ao programa diretamente pela linha de comando. Tais entradas são comumente chamadas de argumentos e são muito mais práticas para o usuário do que encher o programa de input() e raw_input(). Vejamos um exemplo de passagem de argumentos em um famoso programa para Linux:

$ ifconfig eth0 address 192.168.0.10

No exemplo acima, ifconfig é o nome do programa, e o restante (eth0 address 192.168.0.10) são os argumentos para esse programa. Por que isso é mais prático do que o seguinte?

$ ifconfig
Digite a interface de rede que deseja configurar: eth0
Digite o endereço para a interface de rede: 192.168.0.10
$

Simples. O primeiro exemplo permite que seja criado um script com entradas dinâmicas, baseadas no conteúdo de variáveis, permite fácil repetição da execução dos comandos (juntamente com as entradas) através das funções de histórico do shell, sem falar que possibilita comunicação entre programas de forma facilitada. OK, mas como fazemos para obter as entradas do usuário vindas da linha de comando em Python?

Existe mais de uma resposta para essa pergunta. Vamos à mais comum:

import sys
print sys.argv[0]
print sys.argv[1]
print sys.argv[2]

O exemplo acima mostra o uso do atributo argv do módulo sys. Através desse atributo, podemos acessar as entradas passadas pelo usuário. Considere que o código acima é o conteúdo de um arquivo chamado args.py. Se esse arquivo for executado da seguinte forma:

$ python args.py Hello world

Produzirá a seguinte saída:

args.py
Hello
world

Isso mesmo, como podemos ver, o primeiro argumento para o programa é o próprio nome do programa, e é acessado através de sys.argv[0]. A variável argv nada mais é do que uma lista. Sendo assim, seus elementos podem ser acessados via índice. E o que acontece se chamarmos o programa acima sem argumentos?

$ python args.py
args.py
Traceback (most recent call last):
  File "args.py", line 5, in <module>
    print sys.argv[1]
IndexError: list index out of range

Temos um erro de execução, pois nosso código tenta acessar elementos inexistentes na lista argv. O que fazer? Antes de acessar um elemento, devemos checar se a lista o contém.

import sys
if len(sys.argv) >= 3:
    print sys.argv[0]
 print sys.argv[1]
 print sys.argv[2]

Mas e aqueles programas que possuem diversas opções pela linha de comando, sendo algumas obrigatórias, outras opcionais, como fazem? Tratam opção por opção?

Até podem fazer isso de forma manual, mas existem ferramentas para manipulação de argumentos vindos da linha de comando que facilitam bastante o trabalho. Uma delas será o tema do próximo post: a argparse.

Até breve.

Anúncios

Um comentário sobre “Argumentos da linha de comando

  1. Pingback: Tratando argumentos com argparse « Python Help

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s