【python模块】Argparse


Argparse模块介绍

argparse 模块是 Python 标准库中的一个用于编写用户友好的命令行接口(CLI)的模块。它允许程序定义它所需要的命令行参数,然后 argparse 会自动从 sys.argv 解析出那些参数。argparse 自动生成帮助和使用手册,并在用户给程序传入无效参数时报错。

使用 argparse 可以让你的程序更加灵活和易于使用,因为它允许用户通过命令行参数来定制程序的行为,而不是硬编码在程序中。这对于需要处理不同输入数据或配置选项的脚本尤其有用。

基本用法

下面是如何创建一个基本的命令行接口的示例:

  1. 导入模块:首先,需要导入 argparse 模块。
import argparse
  1. 创建解析器:使用 ArgumentParser 类创建一个新的解析器对象。你可以指定程序的描述,这将在帮助信息中显示。
parser = argparse.ArgumentParser(description='这是一个命令行工具的示例。')
  1. 添加参数:使用 add_argument() 方法定义程序接受的命令行参数。这个方法接受多个参数来指定如何解析命令行参数,下文将详细介绍。
# 添加一个位置参数
parser.add_argument('input', help='输入文件的路径')

# 添加一个可选参数,带有一个短名称和一个长名称
parser.add_argument('-o', '--output', help='输出文件的路径', default='output.txt')

# 添加一个开关参数
parser.add_argument('--verbose', action='store_true', help='增加输出的详细程度')
  1. 解析参数:使用 parse_args() 方法解析参数。这个方法会从 sys.argv 中读取参数,并根据之前定义的规则进行解析。
args = parser.parse_args()
  1. 使用参数:解析后的参数存储在 args 对象中,你可以根据需要使用它们。
if args.verbose:
    print('详细模式已开启')

print(f'输入文件:{args.input}')
if hasattr(args, 'output'):
    print(f'输出文件:{args.output}')

将以上代码片段组合起来,我们得到一个完整的示例脚本:

import argparse

# 创建解析器
parser = argparse.ArgumentParser(description='这是一个命令行工具的示例。')

# 添加参数
parser.add_argument('input', help='输入文件的路径')
parser.add_argument('-o', '--output', help='输出文件的路径', default='output.txt')
parser.add_argument('--verbose', action='store_true', help='增加输出的详细程度')

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

# 使用参数
if args.verbose:
    print('详细模式已开启')

print(f'输入文件:{args.input}')
if hasattr(args, 'output'):
    print(f'输出文件:{args.output}')

要运行这个脚本并传入参数,你可以在命令行中这样做:

python your_script.py example.txt -o result.txt --verbose

这将输出:

详细模式已开启
输入文件:example.txt
输出文件:result.txt

ArgumentParser 类提供了丰富的功能来帮助你构建复杂的命令行接口,包括但不限于子命令解析、类型检查、默认值设置等。

add_argument()

add_argument() 方法是 argparse 模块中最核心的方法之一,用于向程序中添加命令行参数。这个方法非常灵活,允许你指定参数的名称、类型、是否必需、默认值、帮助信息等。下面是对 add_argument() 方法中一些常用参数的详细介绍:

  1. name_or_flags
  • 类型:字符串或字符串列表
  • 描述:参数的名称或一组名称(也称为标志)。如果是一个字符串,并且以 --- 开头,那么它将被视为一个标志(flag)。如果是一个字符串列表,列表中的每个元素都将被视为一个单独的标志,它们共享相同的参数值。
  • 示例'--foo'['-f', '--foo']
  1. action
  • 类型:字符串或 argparse.Action 子类
  • 描述:当解析到参数时,应该采取的基本动作类型。常见的动作包括 'store'(存储值)、'store_true'(表示布尔值 True)、'store_false'(表示布尔值 False)、'append'(将值追加到列表中)等。也可以自定义动作类型。
  • 示例'store_true'
  1. nargs
  • 类型:整数或 '*', '?', '+'
  • 描述:命令行参数应该消耗的输入数量。'*' 表示消耗所有剩余的命令行参数,'?' 表示参数是可选的(并且最多只能有一个值),'+' 表示参数至少需要一个值。
  • 示例'+'
  1. const
  • 类型:任意
  • 描述:与 actionnargs 一起使用时,const 提供了当参数不存在但需要一个默认值时的值。
  • 示例:对于 'store_const''append_const' 动作,const 指定了要存储或追加的常量值。
  1. default
  • 类型:任意
  • 描述:如果命令行中没有提供该参数,则使用的默认值。
  • 示例10
  1. type
  • 类型:可调用的(如函数、类型或 argparse.FileType
  • 描述:命令行参数应该被转换成的类型。可以是 Python 的内置类型(如 intfloatstr),也可以是自定义的类型转换函数。
  • 示例int
  1. choices
  • 类型:容器
  • 描述:参数允许的值的容器。如果命令行中的值不在此容器中,则抛出 argparse.ArgumentError
  • 示例['yes', 'no', 'maybe']
  1. required
  • 类型:布尔值
  • 描述:是否必须提供该命令行参数。
  • 示例True
  1. help
  • 类型:字符串
  • 描述:参数的简短描述,用于生成帮助和使用手册。
  • 示例"Enable verbose mode"
  1. metavar
  • 类型:字符串
  • 描述:在帮助消息中用于参数值的名称。如果参数有多个值(如由 nargs 指定),则可以使用 {0}{1} 等来指定每个值的名称。
  • 示例"FILE"

代码示例

import argparse

parser = argparse.ArgumentParser(description='Example of add_argument()')

# 添加一个简单的参数
parser.add_argument('--count', type=int, default=1, help='number of items')

# 添加一个布尔参数
parser.add_argument('--verbose', action='store_true', help='increase output verbosity')

# 添加一个具有多个值的参数
parser.add_argument('--files', nargs='+', type=argparse.FileType('r'), help='input files')

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

# 使用参数
print(f"Count: {args.count}")
print(f"Verbose: {'on' if args.verbose else 'off'}")
for file in args.files:
    print(f"File: {file.name}")

在这个示例中,我们添加了三个参数:--count 是一个简单的整数参数,--verbose 是一个布尔参数,--files 是一个接受多个文件路径的参数。


世间文字八万个,唯有一字最是能杀人:情字可误人,情字可杀人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值