gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:42:06 25 4
gpt4 key购买 nike

我想调用我的程序,例如 program -s <optional value> 。我想分配一个默认值,但也希望能够检测 -s 是否给出了开关。我有什么:

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

这给了我 args.s 的值为 10如果我不给-s在命令行上,和 None如果我指定 -s没有值(value)。我想要的是args.s等于 None如果没有给出开关,并且 args.s使用 -s 设置为默认值给定,和 args.s等于 custom_value如果运行为 program -s custom_value 。我怎样才能实现这个目标?

最佳答案

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

When add_argument() is called with option strings (like -f or --foo) and nargs='?'. This creates an optional argument that can be followed by zero or one command-line arguments. When parsing the command line, if the option string is encountered with no command-line argument following it, the value of const will be assumed instead. See the nargs description for examples.

此外,我添加了 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)

关于python argparse 带有可检测开关的可选位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17270629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com