我正在尝试制作一个使用以下命令的 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
.
我在 OS X 10.8.4 上使用 Python 2.7.2。
EDIT:我尝试了 Gabriel Jacobsohn 的建议,但无法在所有情况下都能正常工作。
我试过这个:
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')
, but myScript -u batman
and myScript --user-name=batman
会打印Namespace(user_name='admin')
.
我尝试更改名称user-name
to user_name
在第一add_argument
线,有时会导致两者batman
and admin
在名称空间或错误中,具体取决于我如何运行程序。
我尝试更改名称user_name
to user-name
在第二个add_argument
行,但会打印Namespace(user-name='batman', user_name='admin')
or Namespace(user-name='admin', user_name='batman')
,取决于我如何运行程序。