python-argparse
argparse 模块是 Python 内置的用于命令项选项与参数解析的模块,argparse 模块可以让人轻松编写用户友好的命令行接口,能够帮助程序员为模型定义参数。
使用argparse 配置命令行参数时,需要三步:
- 创建命令行解析器对象
argparse.ArgumentParser()
对象 - 给解析器添加命令行参数
add_argument()
方法添加参数 - 解析命令行的参数
parse_args()
解析添加的参数
案例
创建一个 Demo.py 文件
import argparse
# 1. 定义命令行解析器对象
parser = argparse.ArgumentParser(description='Demo of argparse')
# 2. 添加命令行参数
parser.add_argument('--epochs', type=int, default=30)
parser.add_argument('--batch', type=int, default=4)
# 3. 从命令行中结构化解析参数
args = parser.parse_args()
print(args)
epochs = args.epochs
batch = args.batch
print('show {} {}'.format(epochs, batch))
在命令行执行如下命令
$ python Demo.py
Namespace(batch=4, epochs=30)
show 30 4
argparse.ArgumentParser()
parser = argparse.ArgumentParser(prog=name,description='Process some integers.')
一般只需要一个参数prog l
argparse.add_argument()
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
- name or flags 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。
- action 命令行遇到参数时的动作,默认值是 store_true。
--store 当前的参数值(默认动作)
--extend 存储一个列表,并将每个参数值加入到列表中。
--store_const 参数指定的值
--append 将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
--append_const 将参数规范中定义的一个值保存到一个列表;
--count 存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
- nargs 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
- const - action 和 nargs 所需要的常量值。
- default 不指定参数时的默认值。
- type 命令行参数应该被转换成的类型。
- choices 参数可允许的值的一个容器。
- required 可选参数是否可以省略 (仅针对可选参数)。
- help 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
- metavar 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
- dest 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
参数选项
- name or flags: 参数名
parser.add_argument('bar') # 添加位置参数
parser.add_argument('-f', '--foo') # 添加可选参数
- store_true 值存为 True 或 False
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')
parser.add_argument('--baz', action='store_false')
parser.parse_args('--foo --bar'.split())
Namespace(bar=False, baz=True, foo=True)
案例
import argparse
parser = argparse.ArgumentParser(prog='程序名字', usage='用来测试的python程序', description="帮助文档之前显示的文本", epilog="↓在帮助文档之后显示的文本",
add_help=False)
parser.add_argument('-h', '--帮助', action='help', help='查看帮助信息')
parser.add_argument('-a', '--全部', help='开启全部测试(默认开启)', action='store_true')
parser.add_argument('-m', '--模块', help='使用绕过的模块', action='store_const', const=[1, 2, 3, 4])
parser.add_argument('-u', '--链接', help='目标的URL地址,比如http://127.0.0.1/',action='store_false')
parser.add_argument('-t', '--目标', help='具体要扫描的目标,比如/index(默认:/)', action='store_false',dest="目标")
parser.add_argument('-v', '--版本', action='version', help='查看当前版本', version='%(prog)s 0.1 版本')
args=parser.parse_args()
$python demo1.py -h
usage: 用来测试的python程序
帮助文档之前显示的文本
optional arguments:
-h, --帮助 查看帮助信息
-a, --全部 开启全部测试(默认开启)
-m, --模块 使用绕过的模块
-u, --链接 目标的URL地址,比如http://127.0.0.1/
-t, --目标 具体要扫描的目标,比如/index(默认:/)
-v, --版本 查看当前版本