python argparse 模块的使用

创建日期: 2022-11-16 17:56 | 作者: 风波 | 浏览次数: 13 | 分类: Python

1. 重复接受同一个参数 action='append'

parser.add_argument(
    "-a",
    "--aimg",
    help="tags for img",
    action='append', # 这里要选 append
    type=str,
    default=None
    )

读取参数

args = parser.parse_args()
print("args.aimg: {}".format(args.aimg))

输出结果

args.aimg: ['ase', 'dee'] # 结果是一个 list

2. 指定一个参数可以接受的值的数量

来源:https://stackoverflow.com/questions/36166225/using-the-same-option-multiple-times-in-pythons-argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    '-i',
    '--input',
    action='append',
    nargs=2, # 这个参数需要2个值
    metavar=('url','name'), # 这两个值分别是什么意思
    help='help:')

输出帮助信息

In [295]: parser.print_help()
usage: ipython2.7 [-h] [-i url name]

optional arguments:
  -h, --help            show this help message and exit
  -i url name, --input url name
                        help:

输入和读取结果

In [296]: parser.parse_args('-i one two -i three four'.split())
Out[296]: Namespace(input=[['one', 'two'], ['three', 'four']])

This does not handle the 2 or 3 argument case (though I wrote a patch some time ago for a Python bug/issue that would handle such a range).

How about a separate argument definition with nargs=3 and metavar=('url','name','other')?

The tuple metavar can also be used with nargs='+' and nargs='*'; the 2 strings are used as [-u A [B ...]] or [-u [A [B ...]]].

3. 从字符串解析参数

参考:https://stackoverflow.com/questions/8878478/how-can-i-use-pythons-argparse-with-a-predefined-argument-string

import argparse
import shlex

parser = argparse.ArgumentParser(description='Argparse Test script')
parser.add_argument("param", help='some parameter')

argString = '-vvvv -c "yes" --foo bar --some_flag'
args = parser.parse_args(shlex.split(argString))

一个完整例子

import argparse

parser = argparse.ArgumentParser()

# 指定参数为数字
parser.add_argument(
        "-l",
        "--limit",
        help="download url count",
        type=int,
        default=-1
        )

# 指定参数为字符串
parser.add_argument(
        "-i",
        "--id",
        help="url id, -i 1,5-6,8,7",
        type=str,
        default=''
        )

# 指定参数为 bool
parser.add_argument(
        "-P",
        action="store_true",
        help="prompt",
        default=False
        )

# 指定参数为无名参数(收集所有不带 - 的参数)
# ⚠️:如果 nargs="+",那么至少需要一个无名参数。
parser.add_argument(
        "urls",
        nargs='*',
        metavar='N',
        type=str,
        help="url list",
        default=''
        )

args = parser.parse_args()

# 使用参数
print(args.limit)

print(args.id)

print(args.P == True)

for u in args.urls:
    print(u)

参考:https://www.mattzeunert.com/2012/02/12/unnamed-arguments-with-argparse.html

13 浏览
9 爬虫
0 评论