背景

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

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

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

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

对于opt函数中有两种选项的写法,即短格式与长格式。

短格式
对于短格式,"-"号后面需要紧跟一个选项字母.如果还有此选项的附加参数,可以使用空格分开,也可以不分开.长度任意,可以使用引号.如下是正确的情况:

-o
-oa
-obbbb
-o bbbb
-o ‘a b’

长格式
对于长格式,“–“号后面要跟一个单词.如果还有一些选项的附加参数,后面要紧跟”=”,再加上参数.“=”号前候不能有空格.如下是正确的情况:

–help=file1
下面这些事不正确的情况:

– help=file1
–help =file1
–help = file1
–help= file1

getopt的三个步骤:

1.导入getopt,sys模块

2.分析命令行参数

3.处理结果

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函数来告诉用户如何使用脚本。

python-命令行参数处理 getopt模块详解的更多相关文章

  1. [转]Python 命令行参数和getopt模块详解

    FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...

  2. Python 命令行参数和getopt模块详解

    有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

  3. python标准库介绍——26 getopt 模块详解

    ==getopt 模块== ``getopt`` 模块包含用于抽出命令行选项和参数的函数, 它可以处理多种格式的选项. 如 [Example 2-23 #eg-2-23] 所示. 其中第 2 个参数指 ...

  4. C语言/Linux命令行参数argc、argv[ ]详解

    1.void main(int argc,char *argv[]) argv[]:表示的是一个指针数组,一共有argc个元素,其中存放的是指向每一个参数的指针. argc:参数个数 2.以Linux ...

  5. Python命令行参数解析模块getopt使用实例

    Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...

  6. 命令行参数解析函数 getopt

    命令行参数解析函数 —— getopt() getopt()函数声明如下: #include <unistd.h> int getopt(int argc, char * const ar ...

  7. shell 命令行参数(getopt和getopts)

    getopt 命令 使用getopt命令,可以解析任何命令行选项和参数,但是用法比较复杂.getopt的命令用法如下: $ getopt --help 用法: getopt optstring par ...

  8. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  9. Python命令行参数及文件读出写入

    看完了柯老板的个人编程作业,虽然是评测组不用做此次作业,但还是想对本次作业涉及到利用Python命令行参数以及进行文件读出写入操作做一个简单的总结.(个人编程作业还是想自己能敲一敲,毕竟我的码力还是小 ...

  10. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

随机推荐

  1. idea报错 "cannot access ..."的解决办法

    File -> Invalidate Caches -> Invalidate and Restart

  2. css - 去掉图片下的白边

    造成原因: 图片的 display 属性默认是 inline ,而这个属性的 vertical-align 的默认值是baseline. 解决办法1( 建议使用block ,  对 ie浏览器 比较友 ...

  3. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.27)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  4. [转帖]为什么需要在脚本文件的开头加上#!/ bin / bash?

    本文翻译自:Why do you need to put #!/bin/bash at the beginning of a script file? I have made Bash scripts ...

  5. [转帖]【VIM】多行缩进空格与删除

    向前或向后缩进一个TAB 按ctrl + v组合键进入Visual Line模式,可使用方向键选择多行: 按<或>,进行向前或向后缩进tab. 缩进n个TAB,按n+<或> 多 ...

  6. [转帖]linux内存挂载

    1.主要功能 在linux中,为了提高读写速度,可以将内存挂载到目录,常见的文件格式有tmpfs和ramfs. 2.挂载步骤 $ sudo mkdir /mnt/tmp $ sudo mkdir /m ...

  7. [转帖]一文解决内核是如何给容器中的进程分配CPU资源的?

    https://zhuanlan.zhihu.com/p/615570804   现在很多公司的服务都是跑在容器下,我来问几个容器 CPU 相关的问题,看大家对天天在用的技术是否熟悉. 容器中的核是真 ...

  8. [转帖]gdb 常用命令

    https://www.cnblogs.com/xvic/p/15997498.html 栈信息 不管是操作转储文件还是用GDB设置断点进行调试,都可以输入 (gdb)bt 打印栈内容进行查看.一般的 ...

  9. [转帖]IO多路复用的三种机制Select,Poll,Epoll

    I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作 ...

  10. 物联网浏览器(IoTBrowser)-顶尖OS2电子秤协议实现

    本教程基于  物联网浏览器(IoTBrowser)-Web串口自定义开发 ,详细的过程可以翻看之前的文章. 本篇以实现顶尖OS2系列电子秤协议对接,并集成到IoTBrowser平台.由于没有找到OS2 ...