Como usar getopt / OPTARG em Python?Como deslocar argumentos se muitos argumentos (9) são fornecidos?
Pergunta
Como usar getopt / optarg em python?
Solução
Este é um exemplo de como faço isso, geralmente uso o mesmo modelo básico:
import sys
import getopt
try:
opts, args = getopt.getopt(sys.argv[1:], 'm:p:h', ['miner=', 'params=', 'help'])
except getopt.GetoptError:
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ('-h', '--help'):
usage()
sys.exit(2)
elif opt in ('-m', '--miner'):
miner_name = arg
elif opt in ('-p', '--params'):
params = arg
else:
usage()
sys.exit(2)
Não acho que haja um limite de 9 parâmetros.
Outras dicas
Uma pesquisa no Google teria ajudado.Dê uma olhada em getopt e argparse módulos na biblioteca padrão:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print args.accumulate(args.integers)
Em seguida, execute-o conforme o esperado:
$ prog.py -h
usage: prog.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
Quando executado com os argumentos apropriados, ele imprime a soma ou o máximo dos inteiros da linha de comando:
$ prog.py 1 2 3 4
4
$ prog.py 1 2 3 4 --sum
10
Isso vem direto da biblioteca padrão.
Você já tentou ler a documentação do python para o módulo getopt
(http://docs.python.org/library/getopt.html?highlight=getopt#module-getopt )?Ele fornece um exemplo simples de como o getopt
é usado.O que você quer dizer com argumentos de deslocamento?Se você quiser verificar se o usuário não usa mais de 9 argumentos, você pode verificar o comprimento da lista sys.argv
, que contém todas as opções / argumentos passados para o script.O primeiro elemento é o nome do script que é invocado, então o comprimento é sempre pelo menos 1. Você poderia fazer algo como:
if len(sys.argv) > 10
print('Too many arguments.')