python argparse可选位置参数,带可检测开关

python argparse可选位置参数,带可检测开关,python,argparse,Python,Argparse,我想像program-s一样登录我的程序。我希望分配一个默认值,但也希望能够检测是否给出了-s开关。 我所拥有的: max_entries_shown = 10 import argparse parser = argparse.ArgumentParser() parser.add_argument("-s", nargs = '?', default = max_entries_shown) args = parser.parse_args() 如果我没有在命令行上给出-s

我想像
program-s
一样登录我的程序。我希望分配一个默认值,但也希望能够检测是否给出了
-s
开关。 我所拥有的:

max_entries_shown = 10
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-s",
    nargs = '?',
    default = max_entries_shown)
args = parser.parse_args()

如果我没有在命令行上给出
-s
,那么
参数s
的值为10,如果我没有值指定
-s
,那么
。如果没有给出开关,
args.s
等于
None
,并且
args.s
设置为默认值,同时
-s
给定,
args.s
等于
自定义_值
如果作为
程序-s自定义_值
运行。如何实现这一点?

您必须使用
const
而不是
default
。引用argparse Python文档中关于何时使用的内容:

当使用选项字符串(如-f或--foo)调用add_argument()并使用nargs='?'时。这将创建一个可选参数,后面可以跟零个或一个命令行参数。在分析命令行时,如果遇到选项字符串,且其后没有命令行参数,则将假定值为const。有关示例,请参见nargs说明

此外,我还添加了一个
type=int
,因为我假设您希望将输入视为int

因此,您的代码应该是:

max_entries_shown = 10
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-s",
    nargs = '?',
    const = max_entries_shown,
    type=int)
args = parser.parse_args()
此代码返回(带打印参数)

$ python parse.py
Namespace(s=None)
$ python parse.py -s
Namespace(s=10)
$ python parse.py -s 12
Namespace(s=12)