2012-04-29 2 views
1

Я пытаюсь написать скрипт с использованием языка python (abc.py). При выполнении сценария мне нужно взять несколько аргументов командной строки.Лучший способ программирования

say -m, -p - мои аргументы. Мне нужно иметь строку рядом с этими параметрами. например:

1. $> python abc.py -m 'first' -p 'second' {correct} 
2. $> python abc.py -p 'first' -m 'second' {correct} 
3. $> python abc.py -m -p 'first' 'second' {Incorrect} 
4. $> python abc.py 'first' -p 'second' {Incorrect} 

У меня есть еще такие аргументы, как -m, -p. Каков наилучший алгоритм для проверки правильности переданных аргументов. Я не могу думать иначе, чем метод, поддерживающий предыдущий аргумент и проверяющий на основе этого.

Спасибо за вас помочь заранее

Анжи

ответ

7

Вам не нужно делать это самостоятельно, Python, как они говорят, что поставляется с батарейками. Стандартная библиотека имеет два модуля для анализа аргументов командной строки: argparse для python 2.7+ и optparse для версии 2.6 или старше. Документация для них также имеет хорошие примеры использования.

+3

2,6 и старше можно установить с помощью easy_install argparse а :) – qrtt1

+0

спасибо за пролить свет на меня. SO никогда не разочарует меня :) – Anji

0

Модули хороши, хотя они не играют хорошо с pylint, поэтому я стараюсь проводить собственный анализ аргументов, чтобы улучшить обнаружение ошибок. EG:

red = False 
blue = False 
green = False 
red_weight = 1.0 
green_weight = 1.0 
blue_weight = 1.0 

while sys.argv[1:]: 
    if sys.argv[1] in [ '-h', '--help' ]: 
     usage(0) 
    elif sys.argv[1] in [ '-r', '--red' ]: 
     red = True 
    elif sys.argv[1] in [ '-b', '--blue' ]: 
     blue = True 
    elif sys.argv[1] in [ '-g', '--green' ]: 
     green = True 
    elif sys.argv[1] == '--red-weight': 
     red_weight = float(sys.argv[2]) 
     del sys.argv[1] 
    elif sys.argv[1] == '--green-weight': 
     green_weight = float(sys.argv[2]) 
     del sys.argv[1] 
    elif sys.argv[1] == '--blue-weight': 
     blue_weight = float(sys.argv[2]) 
     del sys.argv[1] 
    else: 
     sys.stderr.write('%s: unrecognized option: %s\n' % (sys.argv[0], sys.argv[1])) 
     usage(1) 
    del sys.argv[1] 

НТН

Смежные вопросы