python 命令行解析-getopt

getopt

在写脚本程序的时候需要添加一些额外的参数来实现脚本的附加功能或者增强功能,通常的做法是同sys.argv[i]直接来获取参数的值,但是这个比较局限,要求参数的输入一定要按照顺序。

fileName = sys.argv[1];
regName  = sys.argv[2];

如果在命令行输入的第一个参数不是文件的名字,那么脚本执行就会出问题。并且上面要求一定要输入2个参数才能运行。有很大的局限性,如果脚本是开发者本人使用,可能问题不大,如果是交给其他人使用可能就不友好了。

为了实现参数顺序任意摆放都可以,参数个数任意个数都可以执行脚本,可以使用getopt()函数来实现功能。

1.加入getopt模块

from getopt import getopt;    # getopt模块中还有其他函数,这里只需要getopt

2.调用getopt函数

opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])#"ho:"也可以写成'-h-o:'

print(opts)
print(args)
  1. 使用sys.argv[1:]过滤掉第一个参数(它是执行脚本的名字,不应算作参数的一部分)。

  2. 使用短格式分析串"ho:"。当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":"号。所以"ho:"就表示"h"是一个开关选项;"o:"则表示后面应该带一个参数。

  3. 使用长格式分析串列表:["help", "output="]。长格式串也可以有开关状态,即后面不跟"="号。如果跟一个等号则表示后面还应有一个参数。这个长格式表示"help"是一个开关选项;"output="则表示后面应该带一个参数。

  4. 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数,即不是按照getopt()里面定义的长或短选项字符和附加参数以外的信息。opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。

  5. 整个过程使用异常来包含,这样当分析出错时,就可以打印出使用信息来通知用户如何使用这个程序。

3.使用的例子

python xxx.py '-h -o file --help --output=out file1 file2'

opts的输出结果为:
[('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

而args则为:
['file1', 'file2'],这就是上面不属于格式信息的剩余的命令行参数。

4.推荐使用方式

import getopt, sys

opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])
for o, a in opts:
    if o in ("-h", "--help"):
        usage()
        sys.exit()
    if o in ("-o", "--output"):
        output = a

使用一个循环,每次从opts中取出一个两元组,赋给两个变量。o保存选项参数,a为附加参数。接着对取出的选项参数进行处理。代码中通常要添加一个usage函数来告诉用户如何使用脚本。

posted @ 2023-09-11 10:40  下夕阳  阅读(176)  评论(0编辑  收藏  举报