- 导入库
import argparse
- 创建参数解析器对象,可以接收多个选项来定制帮助文本和解析行为
parser = argparse.ArgumentParser()
- 添加参数
- 位置参数:必须提供的参数,并且不需要选项前缀(如
-
或--
) - 可选参数:使用选项前缀(如
-
或--
),并且在命令行中是可选的
parser.add_argument()
下面具体看一下例子:
parser.add_argument(
"--prompt",
type=str,
nargs="?",
default="a painting of a virus monster playing guitar",
help="the prompt to render"
)
nargs
参数用于指定一个命令行参数可以接受的值的数量。nargs
可以接受以下几种值:
- 整数: 接受指定数量的值(如
nargs=2
表示该参数接受两个值) '?'
: 表示该参数是可选的,可以接受零个或一个值'*'
: 接受零个或多个值'+'
: 接受一个或多个值
下面重点看 nargs='?'
的情况:
当 nargs="?"
时,参数可以接受零个或一个值。如果没有提供值,则使用默认值(如果指定了 default
参数)。如果没有提供值且没有指定默认值,则该参数的值为 None
。
- 位置参数:在命令行中不需要/不能带参数名,直接带值即可。在
nargs='?'
时,由于位置参数不带参数名,nargs 可以接受
零个或一个值,因此位置参数是不带 const 参数的,只有 default 参数
parser.add_argument(
'bar',
nargs='?',
default='default_bar',
help='位置参数,可以接受零个或一个值'
)
args = parser.parse_args()
print(f"bar: {args.bar}")
1. 没有提供 bar 参数:
python script.py
输出: bar: default_bar
2. 提供 bar
参数和一个值:
python script.py some_value
输出: bar: some_value
- 可选参数:此时就得带参数名,而且根据不同情况可能用到 const 和 default 参数
parser.add_argument(
'--foo',
nargs='?',
const='default_const', # 当没有提供值时使用的常量值
default='default_value', # 完全没有提供参数时使用的默认值
help='可选参数,可以接受零个或一个值'
)
args = parser.parse_args()
print(f"foo: {args.foo}")
1. 没有提供 --foo 参数:
python script.py
输出: foo: default_value
2. 提供 --foo
参数但没有值:
python script.py --foo
输出: foo: default_const
3. 提供 --foo
参数和一个值:
python script.py --foo some_value
输出: foo: some_value
const
和 default
的区别
const
: 当参数存在但没有提供值时使用的常量值。只有在置nargs='?'
或nargs='*'
时才有意义default
: 当参数完全没有出现在命令行中时使用的默认值