python argparse

给python文件添加命令行运行参数

python官网教程

官网详细文档

基本使用

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
  • 不给定任何参数时和原本运行效果一样
  • 自带--help,给定除--help/-h以外的参数时会报错

位置参数(positional args)

import argparse
parser = argparse.ArgumentParser()
paser.add_argument("echo", help="echo the string you use here")
paser.add_argument('square', help="input a number to be squared", type=int)
args = parser.parse_args()
print(args.echo)
print(args.square ** 2)
  • 位置参数在运行时必须给定
  • add_argument()规定了运行时需要接收位置参数,type默认为strhelp-h时显示

  • paser.parse_args()方法的返回值用于提取输入的参数

可选参数(optional args)

import argparse
parser = argparse.ArgumentParser()
#verbose: 冗余的
parser.add_argument('-v', '--verbosity', help='increase output verbosity',
                    action='store_true')
args = parser.parse_args()
if args.verbosity:
    print('verbosity turned on')
  • 可选参数运行时可以指定或不指定
  • 使用--指定可选参数action='store_true'代表在给定时将args中的值设为True,否则为False

  • 可用-指定简写,简写不会添加到args

位置参数与可选参数组合

# ...
parser.add_argument('square', help="input a number to be squared", type=int)
parser.add_argument('-v', '--verbosity', type=int, help='balabala')
args = parser.parse_args()

如何使用:

python3 prog.py 4 -v 1
  • 4赋值给args.square,1赋值给args.verbosity
  • 不给-v选项,args.verbosity的值默认为None
  • 给了-v选项后就必须给出其值

限定参数范围

parser.add_argument('-v', '--verbosity', type=int, choices=[0, 1, 2],
                    help='balabala')
  • -v后的值必须是choices中的一个,否则会报错

使用count

parser.add_argument('-v', '--verbosity', action='count',help='balabala')
  • action='count'统计某个参数出现的次数
python prog.py -vv
python prog.py --verbosity --verbosity
  • 两种都会把args.verbosity的值设为2

  • 不给-v则为None,可通过default设定默认值

parser.add_argument('-v', '--verbosity', action='count', default=0, 
                    help='balabala')

Advanced

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
parser.add_argument("-v", "--verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
if args.verbosity >= 2:
    print("Running '{}'".format(__file__))
if args.verbosity >= 1:
    print("{}^{} == ".format(args.x, args.y), end="")
print(answer)

Conflicting options

用于两个参数不能同时给定, add_mutually_exclusive_group()

import argparse

parser = argparse.ArgumentParser()

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))
  • -vq或其他同时使用二者的命令会给出错误提示
  • -h中显示信息为[-v | -q]表示二者不能共存