翼度科技»论坛 编程开发 python 查看内容

argparse学习笔记

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
  argparse是 Python 的一个内置模块,用于编写用户友好的命令行接口。使用 argparse,你可以很容易地为 Python 脚本添加参数解析功能,使得脚本可以接受命令行选项和参数。学起来也比较简单,接下来我会详细讲解。
 
  在argparse里面,有位置参数和可选参数。位置参数是必不可少的,在命令行里面不可以缺少这个选项,并且这个选项前不需要加-或者--一类的符号;可选参数则可有可无,使用的时候需要在选项之前加上-或者--。
  1. import argparse
  2. parser = argparse.ArgumentParser()
  3. parser.add_argument("square", type=int,
  4.                     help="display a square of a given number")
  5. parser.add_argument("-v", "--verbosity", type=int,
  6.                     help="increase output verbosity")
  7. args = parser.parse_args()
  8. answer = args.square**2
  9. if args.verbosity == 2:
  10.     print(f"the square of {args.square} equals {answer}")
  11. elif args.verbosity == 1:
  12.     print(f"{args.square}^2 == {answer}")
  13. else:
  14.     print(answer)
复制代码
  在这个例子中,首先需要创建一个ArgumentParser的对象,然后可以通过add_argument添加需要的参数。"square"前面没有带-或者--,这是一个位置参数,而且-v或者--verbose则是可选参数。此外,还可以在add_argument当中设定type参数来指定参数的类型。在设定完参数之后,调用parse_args来完成参数的解析,之后就可以愉快地去解析具体参数的值了。
  1. python demo.py 20 -v 1/python demo.py 20 --verbose 1/python demo.py -v 1 20/python demo.py --verbose 1 20
  2. >>20^2 == 400
  3. // 注意,位置参数的位置顺序是可以调换的。
  4. python demo.py 20 -v 2/python demo.py 20 --verbose 2/python demo.py -v 2 20/python demo.py --verbose 2 20
  5. >>the square of 20 equals 400
复制代码
  
  也可以这样玩。
  1. parser.add_argument("-v", "--verbosity", action='count',
  2.                     help="increase output verbosity")
复制代码
  1. python demo.py 20 -v/python demo.py 20 -vv
复制代码
  不少Linux的命令行都是可以通过这种方式来输出更加详细的信息,这样就不用手动指定参数了。不过这段代码依然有缺陷,来看看:
  1. import argparseparser = argparse.ArgumentParser()parser.add_argument("square", type=int,                    help="display a square of a given number")parser.add_argument("-v", "--verbosity", action='count',
  2.                     help="increase output verbosity")args = parser.parse_args()answer = args.square**2if 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)
复制代码
  当我们指定参数-vvv或者-vvvv或者更多的v的时候,反而只能输出一个最简单的计算结果,所以代码的分支条件里面"=="改为">=",这样就大功告成啦。为了更加完美,还可以引入静默模式。
  1. import argparse
  2. parser = argparse.ArgumentParser()
  3. parser.add_argument("square", type=int,
  4.                     help="display a square of a given number")
  5. parser.add_argument("-v", "--verbosity", action='store_true',
  6.                     help="increase output verbosity")
  7. parser.add_argument('-q', '--quiet', action='store_true')
  8. args = parser.parse_args()
  9. answer = args.square**2
  10. if args.quiet:
  11.     print(answer)
  12. elif args.verbosity:
  13.     print(f"the square of {args.square} equals {answer}")
  14. else:
  15.     print(f"{args.square}^2 == {answer}")
复制代码
  这样就有模有样了,命令行的基本功能也齐全了。还可以组合参数:
  1. import argparse
  2. parser = argparse.ArgumentParser()
  3. parser.add_argument("-v", "--verbosity", action='store_true',
  4.                     help="increase output verbosity")
  5. parser.add_argument('-q', '--quiet', action='store_true')
  6. args = parser.parse_args()
  7. if args.verbosity:
  8.     print('v is enabled')
  9. if args.quiet:
  10.     print('q is enabled')
复制代码
  1. python demo.py -v/python demo.py -q/python demo.py -vq/python demo.py -qv
复制代码
  看到这里的朋友可以点点赞或者分享给身边的朋友,以后会继续带来更多有关C++或者Python语言的有趣知识。

来源:https://www.cnblogs.com/ChebyshevTST/p/18339116
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具