Argumento Python: argumento de linha de comando que pode ser nomeado ou posicional

Eu estou tentando fazer um programa em Python que usa oargparse módulo para analisar as opções de linha de comando.

Eu quero fazer um argumento opcional que pode ser nomeado ou posicional. Por exemplo, eu queromyScript --username=batman fazer o mesmo quemyScript batman. Eu também queromyScript sem um nome de usuário para ser válido. Isso é possível? Se sim, como isso pode ser feito?

Eu tentei várias coisas semelhantes ao código abaixo, sem qualquer sucesso.

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()

EDITAR: O código acima lança uma exceção dizendoValueError: mutually exclusive arguments must be optional.

Eu estou usando o Python 2.7.2 no OS X 10.8.4.

EDITAR: Eu tentei a sugestão de Gabriel Jacobsohn, mas não consegui que funcionasse corretamente em todos os casos.

Eu tentei isso:

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)

e correndomyScript batman imprimiriaNamespace(user_name='batman'), masmyScript -u batman emyScript --user-name=batman imprimiriaNamespace(user_name='admin').

Eu tentei mudar o nomeuser-name parauser_name no 1ºadd_argument linha e que às vezes resultou em ambosbatman eadmin no namespace ou um erro, dependendo de como eu corri o programa.

Eu tentei mudar o nomeuser_name parauser-name no dia 2add_argument linha, mas que iria imprimir tantoNamespace(user-name='batman', user_name='admin') ouNamespace(user-name='admin', user_name='batman'), dependendo de como eu corri o programa.

questionAnswers(3)

yourAnswerToTheQuestion