我正在尝试制作一个使用该argparse
模块来解析命令行选项的 Python 程序。
我想创建一个可以命名或定位的可选参数。例如,我想做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()
编辑:上面的代码抛出一个异常说ValueError: mutually exclusive arguments must be optional
.
我在 OS X 10.8.4 上使用 Python 2.7.2。
编辑:我尝试了 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')
,但会打印。myScript -u batman
myScript --user-name=batman
Namespace(user_name='admin')
我尝试将名称更改user-name
为user_name
第一add_argument
行,这有时会导致名称空间中的batman
和admin
名称或错误,具体取决于我运行程序的方式。
我尝试将名称更改user_name
为user-name
第二add_argument
行,但这将打印Namespace(user-name='batman', user_name='admin')
或Namespace(user-name='admin', user_name='batman')
,具体取决于我运行程序的方式。