Я пытаюсь создать программу 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')
, в зависимости от того, как я запускал программу.