【发布时间】:2013-07-10 00:08:47
【问题描述】:
我正在尝试制作一个使用 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')。
我尝试在第一行add_argument 中将名称user-name 更改为user_name,这有时会导致命名空间中的batman 和admin 出现错误,具体取决于我运行程序的方式。
我尝试在第二行add_argument 中将名称user_name 更改为user-name,但这会打印Namespace(user-name='batman', user_name='admin') 或Namespace(user-name='admin', user_name='batman'),具体取决于我运行程序的方式。
【问题讨论】:
标签: python python-2.7 command-line-arguments argparse python-2.x