python-argparse

发布时间 2023-04-07 09:09:10作者: 贝壳里的星海

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, --版本  查看当前版本