Python / argparse:如何创建一个参数(即--clear)不要警告我“错误:参数太少”?

时间:2013-12-03 11:24:07

标签: python argparse

我有这个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:错误:参数太少”

2 个答案:

答案 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也不例外)