date: 2021-06-12title: Python脚本获取命令行参数 #标题
tags: python #标签
categories: python # 分类

getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(—)。

getopt模块

该模块提供了两个方法及一个异常处理来解析命令行参数。

getopt.getopt方法

getopt.getopt 方法用于解析命令行参数列表,语法格式如下:

  1. getopt.getopt(args, options[, long_options])

参数解释如下:

  • args: 要解析的命令行参数列表。
  • options : 以字符串的格式定义,options 后的冒号 : 表示如果设置该选项,必须有附加的参数,否则就不附加参数。
  • long_options : 以列表的格式定义,long_options 后的等号 = 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。
  • 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有 - 或 — 的参数。

另外一个方法是 getopt.gnu_getopt,这里不多做介绍。

Exception getopt.GetoptError

在没有找到参数列表,或选项的需要的参数为空时会触发该异常。

异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。

实例

假定我们创建这样一个脚本,可以通过命令行向脚本文件传递两个文件名,同时我们通过另外一个选项查看脚本的使用。脚本使用方法如下:

  1. usage: test.py -i <inputfile> -o <outputfile>

test.py 文件代码如下所示:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. import sys, getopt
  4. def main(argv):
  5. inputfile = ''
  6. outputfile = ''
  7. try:
  8. opts, args = getopt.getopt(argv, "hi:o:", ["ifile=", "ofile="])
  9. except getopt.GetoptError:
  10. print('test.py -i <inputfile> -o <outputfile>')
  11. sys.exit(2)
  12. for opt, arg in opts:
  13. if opt == '-h':
  14. print('test.py -i <inputfile> -o <outputfile>')
  15. sys.exit()
  16. elif opt in ("-i", "--ifile"):
  17. inputfile = arg
  18. elif opt in ("-o", "--ofile"):
  19. outputfile = arg
  20. print(f'输入的文件为:{inputfile}')
  21. print(f'输出的文件为:{outputfile}')
  22. if __name__ == "__main__":
  23. main(sys.argv[1:])
  24. # 运行结果如下(终端运行):
  25. > python demo_01.py -i aaa -o bbb
  26. 输入的文件为:aaa
  27. 输出的文件为:bbb
  28. > python demo_01.py -h
  29. test.py -i <inputfile> -o <outputfile>