Я пытаюсь создать программу Python, которая использует модуль argparse для анализа параметров командной строки.
Я хочу сделать необязательный аргумент, который можно назвать или позиционным. Например, я хочу, чтобы myScript --username=batman выполнял то же самое, что и myScript batman. Я также хочу myScript без имени пользователя. Это возможно? Если да, как это можно сделать?
Я пробовал разные вещи, похожие на код ниже, без каких-либо успехов.
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-u", "--user-name", default="admin")
group.add_argument("user-name", default="admin")
args = parser.parse_args()
EDIT:. Вышеприведенный код генерирует исключение, говорящее ValueError: mutually exclusive arguments must be optional.
Я использую Python 2.7.2 для OS X 10.8.4.
РЕДАКТИРОВАТЬ. Я попробовал предложение Габриэля Якобсона, но во всех случаях я не мог нормально работать.
Я пробовал это:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-u", "--user-name", default="admin", nargs="?")
group.add_argument("user_name", default="admin", nargs="?")
args = parser.parse_args()
print(args)
и запуск myScript batman будет печатать Namespace(user_name='batman'), но myScript -u batman и myScript --user-name=batman будут печатать Namespace(user_name='admin').
Я попытался изменить имя user-name на user_name в 1-й строке add_argument, что иногда приводило к как batman, так и admin в пространстве имен или ошибке, в зависимости от того, как я запускал программу.
Я попытался изменить имя user_name на user-name во второй строке add_argument, но это напечатает либо Namespace(user-name='batman', user_name='admin'), либо Namespace(user-name='admin', user_name='batman'), в зависимости от того, как я запускал программу.