我有这个cmd行解析stuf,我需要使“--clear”成为一个有效的唯一参数。但是,当我只使用“--clear”作为唯一参数时,我得到一个“错误:参数太少”。
parser = argparse.ArgumentParser(
prog="sl",
formatter_class=argparse.RawDescriptionHelpFormatter,
description="Shoot/Project launcher application",
epilog="")
parser.add_argument("project", metavar="projectname",
help="Name of the project/shot to use")
parser.add_argument("-p", metavar="project_name",
help="Name of the project")
parser.add_argument("-s", metavar="shot_name",
help="Name of the shot")
parser.add_argument("--clear",action='store_true',
help="Clear the information about the current selected project")
parser.add_argument("--test",
help="test parameter")
args=parser.parse_args()
有什么想法吗?感谢
更新: 试着回答一些评论问题。 当我启动应用程序时: sl项目 它工作正常。 但如果我发布它像: sl - 清楚 我得到了一个简单的“sl:错误:参数太少”
答案 0 :(得分:2)
--clear
参数不是问题所在; project
是必需的参数。
如果您无法在未命名项目的情况下调用程序,请通过添加project
使nargs='?'
成为可选项:
parser.add_argument("project", metavar="projectname",
help="Name of the project/shot to use", nargs='?')
如果在使用其他命令行开关时未指定项目名称是错误的,请在解析后明确执行此操作:
args = parser.parse_args()
if not args.clear and args.project is None:
parser.error('Please provide a project')
调用parser.error()
打印错误消息,帮助文本并退出并返回代码2:
$ python main.py --clear
Namespace(clear=True, p=None, project=None, s=None, test=None)
$ python main.py
usage: sl [-h] [-p project_name] [-s shot_name] [--clear] [--test TEST]
[projectname]
sl: error: Please provide a project
答案 1 :(得分:-1)
为每个参数添加默认值( - clear也不例外)