Доброе время суток! Прежде всего, позвольте мне сказать, что я новичок ie в Python мире. У меня проблемы с анализом входных параметров. На данный момент я использую Python 2.7 и модуль, который называется argparse
. Я пытаюсь разработать простое приложение, которое сможет анализировать простые входные параметры. Вот краткий пример:
my_app.py syn c --force
Второй пример:
my_app.py patch --branch
Я вижу, что для этого я могу использовать add_argument
, который может работать с позиционными и необязательными аргументами. Как и в моем случае, я хочу иметь несколько позиционных (но необязательных одновременно) и несколько необязательных аргументов. Для этого я разработал небольшой скрипт
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='My App')
parser.add_argument('sync', type=bool, const=True, nargs='?')
parser.add_argument('-f', '--force', dest='sync_force', type=bool, const=True, nargs='?')
parser.add_argument('-b', '--branch', type=str, const=True, nargs='?')
parser.add_argument('-u', '--url', type=str, const=True, nargs='?')
parser.add_argument('patch', type=bool, const=True, nargs='?')
parser.add_argument('revert', type=bool, const=True, nargs='?')
parser.add_argument('verify', type=bool, const=True, nargs='?')
values = parser.parse_args()
if values.revert:
handler.revert()
else:
parser.print_help()
. Я вижу, что могу использовать nargs='?'
, чтобы указать позиционный параметр как необязательный, но каждый раз, когда я вызываю свой скрипт, он показывает, что получил ' syn c' в качестве входного параметра, даже если я указал ' patch '. Итак, я думаю, что это показывает только первый добавленный элемент. Не могли бы вы сказать мне, что не так и в чем проблема?
Обновление: Я пытаюсь создать ситуацию, когда у меня будет возможность иметь только один позиционный аргумент одновременно ( и хотя бы один, но с любыми дополнительными необязательными параметрами). Например,
my_app.py syn c
my_app.py path
my_app.py verify --force
my_app.pyrevert - филиал