Разбор аргументов с помощью python argparse - PullRequest
0 голосов
/ 05 июля 2018

Я не могу найти никаких примеров для разбора аргументов так, как мне нужно. Имена, в которых есть :, представляют собой известный список (30 из них), значения после них могут иметь или не иметь значения, однако некоторые из них обязательны.

creatAlert.py call_type: I alert_id: 25 message: STATUS OF AGENT PLATFORM notes:

Так что я попытался просто разобрать call_type: I без удачи. Чего мне не хватает, чтобы получить 'I' в переменной call_type?

parser = argparse.ArgumentParser()
parser.add_argument("call_type:", type=str, help="Testing")
args = parser.parse_args()
print args.call_type

Требуется ли специальный трюк для обработки аргумента сообщения, в котором есть пробелы?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

С

import sys
print(sys.argv)

2328:~/mypy$ python3 stack51195799.py call_type: I alert_id: 25 message: STATUS OF AGENT PLATFORM notes:
['stack51195799.py', 'call_type:', 'I', 'alert_id:', '25', 'message:', 'STATUS', 'OF', 'AGENT', 'PLATFORM', 'notes:']

argparse пытается проанализировать argv[1:], в данном случае список из 10 строк. ':' Не имеет никакого особого значения ни для оболочки (которая разделяет командную строку), ни для синтаксического анализатора.

С этим списком вам придется работать, если вы анализируете его напрямую.

0 голосов
/ 05 июля 2018

argparse имеет ожидания, которые отличаются от предоставленного формата. Если ваше апстрим-приложение не соответствует argparse соглашениям, то argparse не будет работать легко.

Вместо этого я рекомендую взять всю строку ввода как строку. Найдите двоеточия и разделите строку в этих словах, поместив полученные значения в словарь. Это легко (достаточно) сделать с помощью грубой силы.

  • Найдите первое слово с двоеточием; сделать это ключом
  • Объединять слова в значение этого ключа, пока вы не нажмете EOL или следующее слово с двоеточием.
...