argparse的简单使用

131 阅读2分钟

本文参考Argparse Tutorial — Python 3.11.1 documentation

argparse是Python标准库中推荐的命令行解析模块。如果使用命令行运行python脚本并且需要传参数给脚本,就可以用该模块。

基本用法

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

仅仅在test.py文件中添加以上代码,通过命令行运行该脚本并添加参数-h就会有帮助信息输出,没有这段代码添加任何参数都不起作用。

python test.py -h

image.png

引入位置选项

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
  • 这段代码规定了命令行需要传入一个位置参数,参数值由echo变量接收,如果不传递该位置参数执行命令将会报错。
  • add_argument()指定命令行接受什么样的参数
  • parse_args()解析参数,返回从命令行中接收到的数据

image.png

add_argument()的help和type参数

parser.add_argument("echo",help="echo the string you use here",type=int)

默认情况将参数视为字符串,设置type=int将参数解析为整型。

引入可选选项

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
    print("verbosity turned on")
  • 这段程序实现了:命令行指定--verbosity时会展示一段文字,不指定时不展示
  • 命令行指定--verbosity时必须跟一个值,不指定时,与该option对应的变量args.verbosity有默认值None
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
                    action="store_true")
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")
  • 这个程序中,option更像是一个flag。我们添加了一个新关键字action="store_true",意思是命令行指定--verbose时,arg.verbose=True,否则arg.verbose=False
  • 命令行指定--verbose时,后面跟值会报错,这种写法真正意义上实现了flag

短选项

为option设置简单的name

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")

add_argument()参数总结

  • help
  • type
  • action
    • action="store_true" 该option对应的变量变成flag,值为True或False,指定option时为True,不指定时为False
    • action="count" 该option对应的变量值为option出现的次数
  • choices 如choices=[0,1,2],命令行该option后跟的值必须是0,1,2中的一个,其他值会报错
  • default

冲突选项

通过add_mutually_exclusive_group()实现两个option不能同时出现。

import argparse

parser = argparse.ArgumentParser(description="calculate X to the power of Y")
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(f"{args.x} to the power {args.y} equals {answer}")
else:
    print(f"{args.x}^{args.y} == {answer}")

ArgumentParser()的关键字参数description描述了命令行所执行的脚本的作用。