在写脚本程序的时候需要添加一些额外的参数来实现脚本的附加功能或者增强功能,通常的做法是同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函数来告诉用户如何使用脚本。

最新文章

  1. java 正则匹配括号对以及其他成对出现的模式
  2. Web API与文件操作
  3. 图片切换小demo
  4. myeclipse中UTF-8设置
  5. coursera机器学习笔记-神经网络,学习篇
  6. website architecture
  7. Qt之自定义界面(右下角冒泡)
  8. Oracle学习第二天---Profile的使用
  9. JAVA生成EXCEL图表
  10. linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析(引用)
  11. java异常处理机制 (转载)
  12. C#.net 创建XML
  13. Oracler读取各种格式的相关日期格式
  14. MySql中的变量定义(转)
  15. [问题解决]LaTex 进行中文文档操作
  16. 打印java堆栈信息
  17. node上传文件并在网页中展示
  18. golang-Beego-orm创建的坑
  19. HashTable使用举例--C#
  20. python解决json序列化时间格式

热门文章

  1. [Linux]信号集和sigprocmask信号屏蔽函数
  2. selenium自动化测试在富文本中输入信息的方法
  3. 【玩转开源】基于Docker搭建Bug管理系统 MantisBT
  4. BZOJ2759 一个动态树好题 LCT
  5. Python2出现SyntaxError: Non-ASCII character '\xe5' in file *******
  6. C语言 第三次作业--函数
  7. SVM python代码自实践
  8. recyclerview嵌套GridView去屏蔽后者的点击事件,而是前者响应到事件。
  9. Bicoloring 二分图+染色
  10. 【Vue-Cli3.0】【1】创建一个Vue-Cli3.0的项目