Python 学习 ---> 命令行解析 argparse

3.2 版后已移除 optparse 模块,并且将不再继续开发;开发转至 argparse 模块进行。

​1、argparse

argparse 是命令行选项、参数和子命令解析器 ​

argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息

有关 Python 命令行解析更细致的介绍,请参阅 argparse 教程

关于 argparse

import optparse
import argparse

print(dir(optparse))
print(optparse.__doc__)
print("*" * 100)
print(dir(argparse))
print(argparse.__doc__)

简单示例:

import argparse

# 使用 argparse 的第一步是创建一个 ArgumentParser 对象:
parser = argparse.ArgumentParser(description='处理命令行参数')

# 添加参数
parser.add_argument(
    'integers', metavar='N', type=int, nargs='+',help='输入一个整数'
)
parser.add_argument(
    '--sum', dest='accumulate', action='store_const', const=sum,
    default=max, help='求和, 默认 max()'
)

# 解析参数,ArgumentParser 通过 parse_args() 方法解析参数
# 通常 parse_args() 参数为空时,将自动从 sys.argv 中确定命令行参数。

try:
    args_1 = parser.parse_args()  # 从 sys.argv 读取参数
    print(args_1)
except BaseException as e:
    print(e)


arg_list = ['--sum', '7', '-1', '42']
# 从列表中解析参数
args_2 = parser.parse_args(arg_list)
print(args_2)

ArgumentParser 对象

class argparse.ArgumentParser(prog=Noneusage=Nonedescription=Noneepilog=Noneparents=[]formatter_class=argparse.HelpFormatterprefix_chars='-'fromfile_prefix_chars=Noneargument_default=Noneconflict_handler='error'add_help=Trueallow_abbrev=Trueexit_on_error=True)

创建一个新的 ArgumentParser 对象。所有的参数都应当作为关键字参数传入。每个参数在下面都有它更详细的描述,但简而言之,它们是:

  • prog - 程序的名称(默认值:sys.argv[0]

  • usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)

  • description - 在参数帮助文档之前显示的文本(默认值:无)

  • epilog - 在参数帮助文档之后显示的文本(默认值:无)

  • parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内

  • formatter_class - 用于自定义帮助文档输出格式的类

  • prefix_chars - 可选参数的前缀字符集合(默认值: '-')

  • fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None

  • argument_default - 参数的全局默认值(默认值: None

  • conflict_handler - 解决冲突选项的策略(通常是不必要的)

  • add_help - 为解析器添加一个 -h/--help 选项(默认值: True

  • allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True

  • exit_on_error - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)

位置参数

示例代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    "square", help="display a square of a given number", type=int
)
args = parser.parse_args()
print(args.square ** 2)

运行结果:

$ python3 prog.py 4
16
$ python3 prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: 'four'

可选参数

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="参数verbosity")
parser.add_argument("--true_or_false", help="参数true_or_false", action="store_true")
args = parser.parse_args()

arg_verbosity = args.verbosity
print(arg_verbosity)
arg_true_or_false = args.true_or_false
print(arg_true_or_false)

关键词 action 赋值为 "store_true"。这意味着,当这一选项存在时,为 args.verbose 赋值为 True。没有指定时则隐含地赋值为 False

短选项

示例代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    "-v", "--verbose", 
    help="increase output verbosity",
    action="store_true"
)
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")

位置参数可选参数 混合使用

示例代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    "square", type=int,
    help="显示输入数字的平方和"
)
parser.add_argument(
    "-v", "--verbosity", action="count", default=0,
    help="输出详细信息"
)
args = parser.parse_args()
answer = args.square ** 2
if args.verbosity >= 2:
    print(f"the square of {args.square} equals {answer}")
elif args.verbosity >= 1:
    print(f"{args.square}^2 == {answer}")
else:
    print(answer)

关键字 default 用来设置默认参数。默认情况下如果一个可选参数没有被指定,它的值会是 None

矛盾的选项( 互斥参数 )

add_mutually_exclusive_group() 允许指定彼此相互冲突的选项。

示例:将引入 --quiet 选项,它将与 --verbose 正好相反:

示例代码:

import argparse

parser = argparse.ArgumentParser(description="简单计算")

group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")

parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x ** args.y

if args.quiet:
    print(answer)
elif args.verbose:
    print("{} to the power {} equals {}".format(args.x, args.y, answer))
else:
    print("{}^{} == {}".format(args.x, args.y, answer))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值