参见 https://docs.python.org/2/howto/argparse.html
1. 创建一个prog.py
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.parse_args()
if __name__ == '__main__':
""" TEST FUNC """
main()
-
第1次尝试:执行
python prog.py
,但是并未打出任何有用的信息
-
第2次尝试:执行
python prog.py --help
或者python prog.py --h
,我们基本什么都没有获取,但是可以看到一个usage的提醒。(注:--help
选项, 可简化为-h
,它可以在命令行运行并提供有用的帮助信息)
-
第3次尝试:执行
python prog.py --verbose
, 由于传入的--verbose
为无效参数,此时会报出error
2. 位置参数介绍
(1) 示例1
现在我们使用add_argument
方法用来增加命令行参数选项 echo;
而parse_args()
方法实际上是返回特定的命令行参数选项 ,本例中是echo.
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print args.echo
if __name__ == '__main__':
""" TEST FUNC """
main()
-
第1次尝试,执行
python prog.py
,显示缺少参数
-
第2次尝试,执行
python prog.py --help
,显示缺少参数
-
第3次尝试,执行
python prog.py echo
,python prog.py foo
,显示缺少参数
(2) 示例2
先再add_argument 增加help=
可显示具体的帮助信息
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("mysqure", help="对给定的参数,进行平方操作")
args = parser.parse_args()
print args.mysqure ** 2
if __name__ == '__main__':
""" TEST FUNC """
main()
-
第1次尝试,执行
python prog.py
,显示缺少参数,可自行尝试 -
第2次尝试,执行
python prog.py -h
,显示缺少参数,可自行尝试
-
第3次尝试,执行
python prog.py 1
,显示缺少参数。虽然我们将命令行参数传入了1,但是argparse
将传入的选项视为string
,导致运行失败
所以!!!需要告诉
argparse
传入的类型为int
-
第4次尝试,传入参数为'int'
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("mysqure", help="对给定的参数,进行平方操作", type=int)
args = parser.parse_args()
print args.mysqure ** 2
if __name__ == '__main__':
""" TEST FUNC """
main()
测试用例;
3. 可选参数介绍
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="增加可选参数")
args = parser.parse_args()
if args.verbosity:
print "已传入可选参数verbosity: %s" % args.verbosity
if __name__ == '__main__':
""" TEST FUNC """
main()
-
测试用例
python prog.py --verbosity hello
等测试例子,测试结果如下
4. 短选项
-
命令行缩写如下
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="增加可选参数")
args = parser.parse_args()
if args.verbosity:
print "已传入可选参数verbosity: %s" % args.verbosity
if __name__ == '__main__':
""" TEST FUNC """
main()
测试结果:
5. 结合位置参数和可选参数
-
示例1
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("mysquare", type=int, help="输入要计算平方的参数")
parser.add_argument("-v", "--verbosity", action="store_true", help="增加可选参数")
args = parser.parse_args()
print "mysquare: ", args.mysquare, "args.verbosity: ", args.verbosity
answer = args.mysquare**2
if args.verbosity:
print "the square of {} equals {}".format(args.mysquare, answer)
else:
print answer
if __name__ == '__main__':
""" TEST FUNC """
main()
测试结果:注 python prog.py 3 --verbosity 和 python prog.py --verbosity 3
是一样的,与顺序无关!
-
多种可选verbosity参数值
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("mysquare", type=int, help="输入要计算平方的参数")
parser.add_argument("-v", "--verbosity", type=int, help="增加可选参数")
args = parser.parse_args()
print "mysquare: ", args.mysquare, "args.verbosity: ", args.verbosity
answer = args.mysquare**2
if args.verbosity == 2:
print "the square of {} equals {}".format(args.mysquare, answer)
elif args.verbosity == 1:
print " {}^2 = {}".format(args.mysquare, answer)
else:
print answer
if __name__ == '__main__':
""" TEST FUNC """
main()
测试结果:
-
限定verbosity参数值
增加choices=[0, 1, 2],限定verbosity取值为0,1, 2
# -*- coding: utf-8 -*-
import argparse
import os
def main():
""" main func """
parser = argparse.ArgumentParser()
parser.add_argument("mysquare", type=int, help="输入要计算平方的参数")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],help="增加可选参数")
args = parser.parse_args()
print "mysquare: ", args.mysquare, "args.verbosity: ", args.verbosity
answer = args.mysquare**2
if args.verbosity == 2:
print "the square of {} equals {}".format(args.mysquare, answer)
elif args.verbosity == 1:
print " {}^2 = {}".format(args.mysquare, answer)
else:
print answer
if __name__ == '__main__':
""" TEST FUNC """
main()
测试结果:
网友评论