python argparse
给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默认为str,help在-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]表示二者不能共存