Python Argparse: последовательность аргументов силы

1

Мне нужно заставить/проверить последовательность аргументов, переданную argpse. Я пробовал использовать "try/except", но он, похоже, не работает.

import argparse

epilog = '''usage example:'''

parser = argparse.ArgumentParser(description="add watchit hosts", epilog=epilog)
parser.add_argument('--add', nargs='*', default="-1", metavar="key 'value'")
args = vars(parser.parse_args())
try:
    args['add'][0] != 'name'
    args['add'][3] != 'desc'
    args['add'][5] != 'ip'
except:
    print "wrong argument sequence, read the help message!"

print args
print args['add'][1]
print args['add'][3]
print args['add'][5]

Следующий вызов должен вызвать ошибку, так как имя отсутствует.

root@lpgaixmgmtlx01: /root>python argparse_test.py --add desc 'aixbuildhost - buildhost - Test(Linz)' ip '172.17.14.37' nagiostmpl 'Enable without Notification' tsm 'AIXBUILDHOST' witnode 'lvgwatchit01t' loc 'loc_gru' devgrp 'hg_aix_lpar' persgrp 'cg_aix'

{'add': ['desc', 'aixbuildhost - buildhost - Test(Linz)', 'ip', '172.17.14.37', 'nagiostmpl', 'Enable without Notification', 'tsm', 'AIXBUILDHOST', 'witnode', 'lvgwatchit01t', 'loc', 'loc_gru', 'devgrp', 'hg_aix_lpar', 'persgrp', 'cg_aix']}
aixbuildhost - buildhost - Test(Linz)
172.17.14.37
Enable without Notification
...and so on

Любое умное решение для принудительной последовательности аргументов?

Теги:
argparse

1 ответ

1
Лучший ответ

try/except работает только в том случае, если код кода в try возвращает ошибку. С помощью метода, который вы сейчас пытаетесь применить, лучше использовать if + sys.exit:

import sys
if args['add'][0] is not 'name' or args['add'][3] is not 'desc' or args['add'][5] is not 'ip':
    parser.error("Wrong argument sequence!")

Пример:

import argparse
import sys

epilog = '''usage example:'''

parser = argparse.ArgumentParser(description="add watchit hosts", epilog=epilog)
parser.add_argument('--add', nargs='*', default="-1", metavar="key 'value'")
args = vars(parser.parse_args())

if args['add'][0] is not 'name' or args['add'][3] is not 'desc' or args['add'][5] is not 'ip':
    parser.error("Wrong argument sequence!")
    # Returns the usage, the error message, and exits (suggested by @hpaulj)

print args
print args['add'][1]
print args['add'][3]
print args['add'][5]
  • 0
    parser.error("Wrong argument sequence") отобразит usage , это сообщение и затем завершится.
  • 0
    Замечательная @hpaulj, я отредактирую это в своем ответе, если вы не возражаете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню