python命令行参数解析包argparse

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')
args = parser.parse_args()
print(args.echo)

主要是是三步

1. 创建解析器

parser = argparse.ArgumentParser()

ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。

2. 添加参数

parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')

给一个 ArgumentParser 添加程序参数信息是通过调用 add_argument() 方法完成的。

3. 解析参数

>>> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])

ArgumentParser 通过 parse_args() 方法解析参数。

官方文档:

Argparse Tutorial — Python 3.11.3 documentation

argparse — Parser for command-line options, arguments and sub-commands — Python 3.11.3 documentation

犯的错:将文件名和包名起了一样。。。会报模块不存在的错。

add_argument()

add_argument()参数分为两大类:

1.位置参数 Positional arguments

添加参数直接用双引号"argment_name"表示。

2. 可选参数 Optional arguments

添加参数用"--argment_name"表示。

自带help的选项 ,可以查看参数的所有情况。

action

store: 储存参数值,默认行为。

store_const:和关键参数const一起使用

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_const', const=42)
parser.parse_args(['--foo'])

Namespace(foo=42)

store_true和store_false :若传了就是True和False本身,不传就是相反

append:参数值组成list

parser = argparse.ArgumentParser()
parser.add_argument('--dataset',
                       action='append',
                       nargs=2,
                       metavar=('DATASET_NAME', 'DATASET_PATH'),
                       required=True,
                       help='')

parser.parse_args('--dataset twitter15 --dataset ./twitter15.json'.split())

Namespace(dataset=['twitter15', './twitter15.json'])

append_const: 这存储一个列表,并将const关键字参数指定的值附加到列表中;

parser = argparse.ArgumentParser()
parser.add_argument('--str', dest='types', action='append_const', const=str)
parser.add_argument('--int', dest='types', action='append_const', const=int)
parser.parse_args('--str --int'.split())

Namespace(types=[<class 'str'>, <class 'int'>])

  count:计算参数出现的次数

parser = argparse.ArgumentParser()
parser.add_argument('--verbose', '-v', action='count', default=0)
parser.parse_args(['-vvv'])
Namespace(verbose=3)

nrgs

N:一个整数,命令行聚集到一个列表中。
'?': 如果可能的话,将从命令行中使用一个参数,并将其作为单个项生成。如果不存在命令行参数,则将生成默认值中的值。请注意,对于可选参数,还有一个额外的情况-存在选项字符串,但后面没有命令行参数。在这种情况下,将生成const中的值。

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='?', const='c', default='d')
parser.add_argument('bar', nargs='?', default='d')
parser.parse_args(['XX', '--foo', 'YY'])
# Namespace(bar='XX', foo='YY') 有值传一个参则单项生成
parser.parse_args(['XX', '--foo'])
# Namespace(bar='XX', foo='c')  存在选择字符foo传参,则赋值const的值
parser.parse_args([])
# Namespace(bar='d', foo='d')  无值传参则则使用默认值


*:说明传的参数零个或者更多
+: 所有命令行参数都被收集到一个列表中。若是不存在至少一个参数则报错。

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('foo', nargs='+')
print(parser.parse_args(['a','b']))
# Namespace(foo=['a', 'b'])

const

const 两种使用情况
1. action='store_const' or action='append_const 
2. nargs='?' 选择字符存在但是参数不存在则使用const,其次是default。

default

若不赋值则默认的值,若没默认的值,则为None。

type

可以自定义

def hyphenated(string):
    return '-'.join([word[:4] for word in string.casefold().split()])

parser = argparse.ArgumentParser()
_ = parser.add_argument('short_title', type=hyphenated)
parser.parse_args(['"The Tale of Two Cities"'])

# Namespace(short_title='"the-tale-of-two-citi')

dest

Namespace的名字设置

对于位置参数, dest作为函数的第一个参数提供。

对于可选参数操作,过获取第一个长选项字符串并去掉初始的“--”来生成dest的值。如果没有提供长选项字符串,则dest将通过剥离首字母-字符从第一个短选项字符串派生。任何内部字符都将转换为_字符,以确保字符串是有效的属性名称。

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo-bar', '--foo')
parser.add_argument('-x', '-y')
parser.parse_args('-f 1 -x 2'.split())
# Namespace(foo_bar='1', x='2') 优先选择--后的名字
parser.parse_args('--foo 1 -y 2'.split())
# Namespace(foo_bar='1', x='2') 同样的条件,选择前面一个

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')
parser.parse_args('--foo XXX'.split())
Namespace(bar='XXX')

metavar

parser = argparse.ArgumentParser()
parser.add_argument('--foo', metavar='YYY')
parser.add_argument('bar', metavar='XXX')
parser.parse_args('X --foo Y'.split())
Namespace(bar='X', foo='Y')
parser.print_help()
# usage:  [-h] [--foo YYY] XXX

# positional arguments:
# XXX

# options:
#  -h, --help  show this help message and exit
#  --foo YYY

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值