2015-06-26 3 views
1

Я хочу передать данные в сценарий, как этотpython optparse как установить args списка?

if __name__ == '__main__': 
    usage = 'python pull.py [-h <host>][-p <port>][-r <risk>]arg1[,arg2..]' 
    parser = OptionParser(usage) 
    parser.add_option('-o', '--host', dest='host', default='127.0.0.1', 
    ┊ help='mongodb host') 
    parser.add_option('-p', '--port', dest='port', default=27017, 
    ┊ help="mongodb port") 
    parser.add_option('-r', "--risk", dest='risk', default="high", 
    ┊ help="the risk of site, choice are 'high', 'middle', 'low', 'all'") 
    options, args = parser.parse_args() 

в этом сценарии, если я хочу установить ./test.py -r высокий и средний, как я могу установить ['high', 'middle'] в optparse?

ответ

1

https://docs.python.org/2/library/optparse.html#standard-option-types

"choice" опция подтип опции "строка". Атрибут опции выбора (последовательность строк) определяет набор допустимых аргументов параметра. optparse.check_choice() сравнивает предоставленные пользователем аргументы аргументов в отношении этого основного списка и выдает OptionValueError, если указана недопустимая строка.

например:

parser.add_option('-r', '--risk', dest='risk', default='high', 
    type='choice', choices=('high', 'medium', 'low', 'all'), 
    help="the risk of site, choice are 'high', 'middle', 'low', 'all'") 

Если вы хотите, чтобы иметь возможность передать несколько значений --risk, вы должны использовать action="append":

опциона action определяет, что optparse делает, когда он сталкивается с этим в командной строке. Стандартные действия опции жестко закодированные в optparse являются:

...

  • "append" [отношение: type, dest, nargs, choices]

    Опция должна сопровождаться аргументом, который добавляется к списку в dest. Если не задано значение по умолчанию для dest, пустой список автоматически создается, когда optparse сначала встречает эту опцию в командной строке. Если nargs> 1, используются несколько аргументов, а кортеж длиной nargs добавляется к dest.

Также остерегайтесь объединения action="append" с default=['high'], потому что вы в конечном итоге в всегда иметь «высокий» в вашем options.risk.

parser.add_option('-r', '--risk', dest='risk', default=[], nargs=1, 
    type='choice', choices=('high', 'medium', 'low'), action='append', 
    help="the risk of site, choice are 'high', 'middle', 'low'") 

Использование:

>>> options, args = parser.parse_args(['-r','high','-r','medium']) 
>>> options.risk 
['high', 'medium'] 
Смежные вопросы