python程序中命令行解析布尔(bool)类型参数的最全实现

在python程序中,如何在命令行中传递布尔(bool)类型参数, 并在程序中解析使用? 在python中通常使用argparse进行参数解析, 常用的实现有以下几种方式。

1. 布尔类型参数以字符串形式传递,例如"true"或"false"。

示例程序program.py如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import argparse

# 创建命令行解析器
parser = argparse.ArgumentParser(description='Boolean argument example')

# 添加布尔类型参数
parser.add_argument('--flag', type=str, default='false', help='A boolean flag')

# 解析命令行参数
args = parser.parse_args()

# 将命令行传递的字符串参数转换为布尔值
flag = args.flag.lower() == 'true'

# 在程序中使用布尔值
if flag:
print("The flag is set to True.")
else:
print("The flag is set to False.")

执行命令:python program.py --flag true

2. 布尔类型参数以Int形式传递,例如"1"或"0"。

示例程序program.py如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import argparse

# 创建命令行解析器
parser = argparse.ArgumentParser(description='Boolean argument example')

# 添加整数类型参数
parser.add_argument('--flag', type=int, default=0, help='An integer flag (0 or 1)')

# 解析命令行参数
args = parser.parse_args()

# 将整数参数转换为布尔值
flag = bool(args.flag)

# 在程序中使用布尔值
if flag:
print("The flag is set to True.")
else:
print("The flag is set to False.")

执行命令:python program.py --flag 1, 类似字符串传递,1表示True,0表示False

3. 布尔类型参数以无参数方式(指定action)传递,例如设置了。

示例程序program.py如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import argparse

# 创建命令行解析器
parser = argparse.ArgumentParser(description='Boolean argument example')

# 添加布尔类型参数
parser.add_argument('--flag', action='store_true', help='A boolean flag')

# 解析命令行参数
args = parser.parse_args()

# 在程序中使用布尔值
if args.flag:
print("The flag is set to True.")
else:
print("The flag is set to False.")

执行命令:python program.py --flag, 结果中加上--flag表示True, 不加表示False。

4. 混合方式, 同时支持以上3种方式

示例程序program.py如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import argparse

def parse_boolean_argument(arg):
if isinstance(arg, bool):
print(f"bool {arg}")
return arg
if isinstance(arg, str):
print(f"str {arg}")
return arg.lower() in ('true', 'y', '1', 'yes')
if isinstance(arg, int):
print(f"int {arg}")
return bool(arg)
raise ValueError("Invalid argument type. Expected bool, str, or int.")

# 创建命令行解析器
parser = argparse.ArgumentParser(description='Boolean argument example')

# 添加参数选项
parser.add_argument('--flag', nargs='?', const=True, type=parse_boolean_argument, default=False, help='A boolean flag')

# 解析命令行参数
args = parser.parse_args()

# 在程序中使用布尔值
if args.flag:
print("The flag is set to True.")
else:
print("The flag is set to False.")

同时支持以下三种命令都表示true: * python program.py --flag true * python program.py --flag 1 * python program.py --flag

2. 参考材料