argparse: Python 命令行参数解析包

发布时间: 更新时间: 总字数:669 阅读时间:2m 作者: IP上海 分享 网址

argparse是Python标准库提供的命令行参数解析包,支持命令行选项、参数和子命令解析

介绍

  • ArgumentParser objects
  • The add_argument() method
    • action 参数
      • help 打印当前解析器中所有选项的完整的帮助信息然后退出
        • 默认情况下,help 动作会自动添加到解析器中
      • store 只是保存参数的值,默认的动作
      • store_const 保存由 const 关键字参数指出的值
      • store_truestore_false 它们是’store_const’ 的特殊情形,分别用于保存值 True 和 False
      • append 保存一个列表,并将每个参数值附加在列表的后面
      • append_const 保存一个列表,并将const关键字参数指出的值附加在列表的后面
      • count 计算关键字参数出现的次数
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--verbose', '-v', action='count')
>>> parser.parse_args('-vvv'.split())
Namespace(verbose=3)
  • default 没有设置值情况下的默认参数
  • choices 候选值参数 parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
  • 必选参数 parser.add_argument('--foo', required=True)
  • The parse_args() method

demo

普通示例

# ref https://docs.python.org/3/library/argparse.html#example
import argparse

parser = argparse.ArgumentParser(
  description='Process some integers.',
  prog="demo.py",  # The name of the program (default: ``os.path.basename(sys.argv[0])``)
)
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

parser.add_argument('--bar', '-b', nargs='?', type=int, default=42,
                    help='the bar to %(prog)s (default: %(default)s)')

parser.add_argument('--version', '-v', action='version', version='<the version>')

args = parser.parse_args()
print(args.accumulate(args.integers))
  • 说明:

    • nargs 表示候选值和含义如下:
      • N 参数的绝对个数(例如:3)
      • ? 0或1个参数
      • * 0或所有参数
      • +所有,并且至少一个参数
  • 执行结果

$ python3 demo.py --help
usage: demo.py [-h] [--sum] [--bar [BAR]] [--version] N [N ...]

Process some integers.

positional arguments:
  N                     an integer for the accumulator

options:
  -h, --help            show this help message and exit
  --sum                 sum the integers (default: find the max)
  --bar [BAR], -b [BAR]
                        the bar to demo.py (default: 42)
  --version, -v         show program's version number and exit

子命令

import argparse

def main():
    parser = argparse.ArgumentParser(description='My program')

    # 添加子命令
    subparsers = parser.add_subparsers(title='Subcommands', dest='subcommand')

    # 创建子命令解析器
    add_parser = subparsers.add_parser('add', help='Add a number')
    add_parser.add_argument('numbers', nargs='+', type=int, help='Numbers to add')

    # 创建另一个子命令解析器
    sub_parser = subparsers.add_parser('sub', help='Subtract a number')
    sub_parser.add_argument('numbers', nargs='+', type=int, help='Numbers to subtract')

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

    # 根据子命令执行操作
    if args.subcommand == 'add':
        result = sum(args.numbers)
        print(f"The sum of the numbers is {result}")
    elif args.subcommand == 'sub':
        result = args.numbers[0]
        for number in args.numbers[1:]:
            result -= number
        print(f"The result of subtracting the numbers is {result}")

if __name__ == '__main__':
    main()
$ python3 demo2.py --help
python3 demo2.py --help
usage: demo2.py [-h] {add,sub} ...

My program

options:
  -h, --help  show this help message and exit

Subcommands:
  {add,sub}
    add       Add a number
    sub       Subtract a number
$ python3 demo2.py add 1 2 3
The sum of the numbers is 6

$ python3 demo2.py sub 6 2
The result of subtracting the numbers is 4

参考

  1. https://docs.python.org/3/library/argparse.html
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数