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

Python/argparse:如何创建参数(即--clear)don';“不要警告我”;错误:参数太少;?,python,argparse,Python,Argparse,我有一行cmd解析stuf,我需要使“-clear”成为一个有效的唯一参数。然而,当我只使用“-clear”作为唯一参数时,我得到了一个“错误:参数太少” parser = argparse.ArgumentParser( prog="sl", formatter_class=argparse.RawDescriptionHelpFormatter, description="Shoot/Project launcher

我有一行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:error:参数太少”

为每个参数添加默认值(--clear不例外)

为每个参数添加默认值(--clear不例外)

这里的问题不是
--clear
参数<代码>项目是必需的参数

如果您应该能够在不命名项目的情况下调用程序,请通过添加
nargs='?'
使
project
成为可选的:

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')
调用将打印错误消息、帮助文本并退出,返回代码为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
--clear
参数不是这里的问题<代码>项目是必需的参数

如果您应该能够在不命名项目的情况下调用程序,请通过添加
nargs='?'
使
project
成为可选的:

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')
调用将打印错误消息、帮助文本并退出,返回代码为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

命令行看起来如何,这会产生错误?!python main.py projectname--clear或python main.py--clear?尝试使用
docopt
而不是
argparse
。它更好更容易使用!akaRem-这个例子中的
docopt
等价物是什么?产生错误的命令行看起来如何?!python main.py projectname--clear或python main.py--clear?尝试使用
docopt
而不是
argparse
。它更好更容易使用!akaRem-本例中的
docopt
等效值是什么?所有参数都已具有
None
默认值
--清除
,因为
存储true
根据定义具有
False
默认值。缺少用户定义的默认值不会导致错误。所有参数都已具有
None
默认值
--清除
,因为
存储true
根据定义具有
False
默认值。缺少用户定义的默认值不会导致错误。