【python编程】命令行选项参数和子命令解析器argparse
optparse
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
含义:
- name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo
- choices: 可选参数范围
- required: 是否一定要设置该选项
- required=True
- required=False
- type: 指定参数类型,默认str
-
- type=int/float/bool: 整数/浮点数/逻辑型
- type=open
- type=limit
- nargs: 选项后参数个数
- nargs=3: 要求3个参数
- nargs="*": 允许0或多个参数
- nargs="?": 要求0或1个参数
- nargs="+": 要求至少1个参数
- const: 指定了选项,但没指定参数时,取const设定的值,而不取default的值。在nargs="?"或action="store_const"时有用。
- action: 接收命令行参数后如何处理
- action="store": 保存参数值,默认
- action="store_const": 设定选项后,将参数的值解析为const的值
- action="store_true": 设定选项后,将参数值自动解析为True
- action="store_false": 设定选项后,将参数值自动解析为False
- action="append": 存储为一个列表,多次使用一个选项时使用
- action="append_const": 存储为一个列表,将const的值追加到列表
- action="count": 统计一个选项出现的次数
- dest:解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
- matavar:在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
- parser.parse_args(): 解析
- parser.print_help(): 打印描述信息
在使用 python的 argparse
模块时,dest
参数用于指定命令行参数解析后存储值的变量名称。默认情况下,argparse
会将命令行参数的名称作为目标变量的名称,但使用 dest
可以自定义这个名称。在使用 Python 的 argparse
模块时,dest
参数用于指定命令行参数解析后存储值的变量名称。默认情况下,argparse
会将命令行参数的名称作为目标变量的名称,但使用 dest
可以自定义这个名称。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--input', help='Input file')
args = parser.parse_args()
print(args.input)
在这个例子中,命令行解析后的值将被存储在 args.input
中。如果你想要使用自定义的变量名称而不是 input
,可以使用 dest
参数:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--input', dest='filename', help='Input file')
args = parser.parse_args()
print(args.filename)
现在,即使命令行参数名称是 --input
,其值将存储在 args.filename
中,而不是 args.input
。
命令行输入:
python script.py --input example.txt
输出:
example.txt
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-o', '--output', action='store_true', help="shows output")
args = parser.parse_args()
print(args.output)
输出:
[root@node01 python]# python3 demo01.py
False
[root@node01 python]# python3 demo01.py -o
True
import argparse
# append action allows to group repeating
# options
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--name', dest='names', action='append', help="provides names to greet")
args = parser.parse_args()
names = args.names
for name in names:
print(f'Hello {name}!')
输出:
$ appending.py -n Peter -n Lucy --name Jane
Hello Peter!
Hello Lucy!
Hello Jane!
该示例生成问候语,并使用n
或name
选项指定所有名称。 它们可以重复多次重复。
import math
import argparse
def parse_args():
parse = argparse.ArgumentParser(description='Calculate cylinder volume')
parse.add_argument('-n', '--num', type=int, nargs='+', metavar='', required=True, help='a string of nums')
args = parse.parse_args()
return args
if __name__ == '__main__':
args = parse_args()
print(args.num)
for i in list(args.num):
print(i)
输出:
[root@node01 python]# python3 demo01.py -n 1 3 5 7 9
[1, 3, 5, 7, 9]
1
3
5
7
9
choices:限定参数值范围(规定只接收规定列表中的值),值为列表。例:choices=[1,2,3] 。例如:
import argparse
parser = argparse.ArgumentParser(description = "help !")
parser.add_argument("-n", type=int, help="输出数量!", choices=[1,2,3], default=2)
parser.add_argument("-v", type=int, help="输出版本!", choices=[7,8,9], default=8)
args = parser.parse_args()
print(args.v, args.n)
输出:
[root@node01 python]# python3 demo01.py -n 3 -v 1
usage: demo01.py [-h] [-n {1,2,3}] [-v {7,8,9}]
demo01.py: error: argument -v: invalid choice: 1 (choose from 7, 8, 9)
[root@node01 python]# python3 demo01.py -n 3 -v 8
8 3
import math
import argparse # 1、导入argpase包
def parse_args():
parse = argparse.ArgumentParser(description='Calculate cylinder volume') # 2、创建参数对象
parse.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder') # 3、往参数对象添加参数
parse.add_argument('-H', '--height', default=4, type=int, help='height of Cylinder')
args = parse.parse_args() # 4、解析参数对象获得解析对象
return args
def cal_vol(radius, height):
vol = math.pi * pow(radius, 2) * height
return vol
if __name__ == '__main__':
args = parse_args()
print(cal_vol(args.radius, args.height)) # 5、使用解析对象.参数获取使用命令行参数
输出:
[root@node01 python]# python3 demo01.py -h
usage: demo01.py [-h] [-r RADIUS] [-H HEIGHT]
Calculate cylinder volume
optional arguments:
-h, --help show this help message and exit
-r RADIUS, --radius RADIUS
Radius of Cylinder
-H HEIGHT, --height HEIGHT
height of Cylinder
metavar
是 argparse
中用于控制帮助文档中参数名显示的选项。以下是一个简单的示例,展示如何使用 argparse
和 metavar
参数:
import argparse
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description="这是一个示例程序")
# 添加参数并设置 metavar
parser.add_argument('--name', type=str, metavar='USERNAME', help='输入您的用户名')
parser.add_argument('--age', type=int, metavar='AGE', help='输入您的年龄')
# 解析命令行参数
args = parser.parse_args()
# 打印解析结果
print(f"用户名: {args.name}")
print(f"年龄: {args.age}")
在这个示例中,--name
和 --age
参数都有一个 metavar
参数。metavar
定义了在帮助信息中如何展示这些参数:
metavar='USERNAME'
意味着在帮助信息中,--name
参数会显示为USERNAME
。metavar='AGE'
意味着在帮助信息中,--age
参数会显示为AGE
。
如果你运行 python script.py --help
,输出的帮助信息将会类似于这样:
usage: script.py [-h] [--name USERNAME] [--age AGE]
这是一个示例程序
optional arguments:
-h, --help show this help message and exit
--name USERNAME 输入您的用户名
--age AGE 输入您的年龄
import math
import argparse # 1、导入argpase包
def parse_args():
parse = argparse.ArgumentParser(description='Calculate cylinder volume') # 2、创建参数对象
parse.add_argument('-r', '--radius', default=2, type=int, metavar='', help='Radius of Cylinder') # 3、往参数对象添加参数
parse.add_argument('-H', '--height', default=4, type=int, metavar='height', help='height of Cylinder')
args = parse.parse_args() # 4、解析参数对象获得解析对象
return args
def cal_vol(radius, height):
vol = math.pi * pow(radius, 2) * height
return vol
if __name__ == '__main__':
args = parse_args()
print(cal_vol(args.radius, args.height)) # 5、使用解析对象.参数获取使用命令行参数
输出:
[root@node01 python]# python3 demo01.py -h
usage: demo01.py [-h] [-r] [-H height]
Calculate cylinder volume
optional arguments:
-h, --help show this help message and exit
-r , --radius Radius of Cylinder
-H height, --height height
height of Cylinder
import argparse
def main():
parser = argparse.ArgumentParser(description="示例:两个选项互斥")
# 创建互斥组
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--option1', action='store_true', help='选项 1')
group.add_argument('--option2', action='store_true', help='选项 2')
args = parser.parse_args()
if args.option1:
print("选项 1 被选择")
if args.option2:
print("选项 2 被选择")
if __name__ == "__main__":
main()
参考资料
2. argparse --- 命令行选项、参数和子命令解析器