Python 3 - argumentos de linha de comando

Python fornece um getopt módulo que ajuda a analisar opções e argumentos de linha de comando.

$ python test.py arg1 arg2 arg3

O Python sys módulo fornece acesso a qualquer argumento de linha de comando por meio do sys.argv. Isso serve a dois propósitos -

  • sys.argv é a lista de argumentos da linha de comando.

  • len(sys.argv) é o número de argumentos da linha de comando.

Aqui sys.argv [0] é o programa ie. o nome do script.

Exemplo

Considere o seguinte script test.py -

#!/usr/bin/python3

import sys

print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))

Agora execute o script acima da seguinte maneira -

$ python test.py arg1 arg2 arg3

Isso produz o seguinte resultado -

Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']

NOTE - Conforme mencionado acima, o primeiro argumento é sempre o nome do script e também está sendo contado em número de argumentos.

Analisando argumentos de linha de comando

Python forneceu um getoptmódulo que ajuda a analisar opções e argumentos de linha de comando. Este módulo fornece duas funções e uma exceção para ativar a análise de argumento da linha de comando.

método getopt.getopt

Este método analisa as opções de linha de comando e a lista de parâmetros. A seguir está uma sintaxe simples para este método -

getopt.getopt(args, options, [long_options])

Aqui está o detalhe dos parâmetros -

  • args - Esta é a lista de argumentos a ser analisada.

  • options - Esta é a string de letras de opção que o script deseja reconhecer, com opções que requerem um argumento devem ser seguidas por dois pontos (:).

  • long_options- Este é um parâmetro opcional e, se especificado, deve ser uma lista de strings com os nomes das opções longas, que devem ser suportadas. Opções longas, que requerem um argumento, devem ser seguidas por um sinal de igual ('='). Para aceitar apenas opções longas, as opções devem ser uma string vazia.

  • Este método retorna um valor que consiste em dois elementos - o primeiro é uma lista de (option, value) pares, o segundo é uma lista de argumentos do programa restantes depois que a lista de opções foi removida.

  • Cada par de opção e valor retornado tem a opção como seu primeiro elemento, prefixado com um hífen para opções curtas (por exemplo, '-x') ou dois hifens para opções longas (por exemplo, '- opção longa').

Exceção getopt.GetoptError

Isso é gerado quando uma opção não reconhecida é encontrada na lista de argumentos ou quando uma opção que requer um argumento não é fornecida.

O argumento para a exceção é uma string que indica a causa do erro. Os atributosmsg e opt fornece a mensagem de erro e a opção relacionada.

Exemplo

Suponha que queremos passar dois nomes de arquivo por meio da linha de comando e também queremos dar uma opção para verificar o uso do script. O uso do script é o seguinte -

usage: test.py -i <inputfile> -o <outputfile>

Aqui está o seguinte script para test.py -

#!/usr/bin/python3

import sys, getopt

def main(argv):
   inputfile = ''
   outputfile = ''
   try:
      opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
   except getopt.GetoptError:
      print ('test.py -i <inputfile> -o <outputfile>')
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print ('test.py -i <inputfile> -o <outputfile>')
         sys.exit()
      elif opt in ("-i", "--ifile"):
         inputfile = arg
      elif opt in ("-o", "--ofile"):
         outputfile = arg
   print ('Input file is "', inputfile)
   print ('Output file is "', outputfile)

if __name__ == "__main__":
   main(sys.argv[1:])

Resultado

Agora, execute o script acima da seguinte maneira -

$ test.py -h
usage: test.py -i <inputfile> -o <outputfile>

$ test.py -i BMP -o
usage: test.py -i <inputfile> -o <outputfile>

$ test.py -i inputfile -o outputfile
Input file is " inputfile
Output file is " outputfile