【发布时间】:2016-07-02 22:30:30
【问题描述】:
[Python 3/argparse]
假设我的应用需要一个位置参数:
myApp.py [desired_function]
但是,如果用户提供了某个选项,那么desired_function 应该不是必需的。
myApp.py --list-functions
在这种情况下,如果 --list-functions 被传递,我希望应用程序继续运行,将我设置的变量 desired_function 保留为空,因为我的代码将看到用户传递了 --list-functions 并采取相应的行动。
但是,如果用户不提供--list-functions 选项,那么参数解析器应该会产生错误,因为用户没有提供所需的位置参数。
如果用户没有提供可选参数,我如何让 argparse仅 将 desired_function 位置设为必需?
到目前为止我的代码:
parser = argparse.ArgumentParser(description="test app")
parser.add_argument("desired_function", help="The function desired", action="store", default="", dest="func")
parser.add_argument("--list-functions",help="List the available functions", action="store_true", default=False, dest="list_mode")
在这种状态下,调用 myApp.py --list-functions 将失败并显示:
usage: myApp.py [-h] [--list-functions] desired_function
myApp.py: error: the following arguments are required: desired_function
【问题讨论】:
-
让
--list-functions简单地产生help输出是否有意义,所以--list-functions使用action='help'并等效于-h,然后将函数列表合并到@987654337 @ 输出?或者,为desired_function提供choices,让argparse完成显示它们的工作?
标签: python-3.x argparse