作者:limodou

版权所有limodou(chatme@263.net) 如要转载请保留此信息!

在运行程序时,你可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选 项;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的 实现了对这两种用法的支持,而且使用简单,下面我就向大家介绍它的用法。

取得命令行参数

在使用之前,首先要取得命令行参数。使用sys模块可以得到命令行参数。

import sys

print sys.argv

然后在命令行下敲入任意的参数,如:

python get.py -o t --help cmd file1 file2

结果为:

['get.py', '-o', 't', '--help', 'cmd', 'file1', 'file2']

可见,所有命令行参数以空格为分隔符,都保存在了sys.argv列表中,其中第1个为脚本的文件名。

选项的写法要求

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

-o

-oa

-obbbb

-o bbbb

-o "a b"

对于长格式,"--"号后面要跟一个单词。如果还有些选项的附加参数,后面要紧跟"=",再加上参数。"="号前后不能有空格。如以下是正确的:

--help=file1

而这些是不正确的:

-- help=file1

--help =file1

--help = file1

--help= file1

如何用getopt进行分析

使用getopt模块分析命令行参数大体上分为三个步骤:

1.导入getopt, sys模块

2.分析命令行参数

3.处理结果

第一步很简单,只要:

import getopt, sys

就行了。

第二步有些复杂,拿Python手册上的例子来说明:

try:

opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])

except getopt.GetoptError:

# print help information and exit:

1. 处理所使用的函数叫getopt(),因为是直接使用import导入的getopt模块,所以要加上限定getopt才可以

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

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

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

5. 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。opts是一个两元组的列表。每个元素为:(选项串,附加参数),如果没有附加参数则为空串''

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

如上面解释的一个命令行例子为:

'-h -o file --help --output=out file1 file2'

在分析完成后,opts应该是:

[('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

而args则为:

['file1', 'file2']

第三步也比较简单。在这一步主要是对分析出的参数进行判断是否存在,然后再进一步处理。主要的处理模式为:

for o, a in opts:

if o in ("-h", "--help"):

usage()

sys.exit()

if o in ("-o", "--output"):

output = a

使用一个循环,每次从opts中取出一个两元组,赋给两个变量。o保存选项参数,a为附加参数。接着对取出的选项参数进行处理。

python getopt使用_【python】getopt使用相关推荐

  1. python 病毒 基因_#Python#提取基因对应的蛋白质名

    提取基因对应的蛋白质官方名 最开始,是需要将基因跟其编码的蛋白质对应起来,找遍了各种数据库都没发现有相关的注释文件,Uniprot作为处理蛋白质的大佬,结果里都有,肯定有办法能够满足需求. 搜索TP5 ...

  2. python keyboard模块_[python] PyMouse、PyKeyboard用python操作鼠标和键盘

    1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quartz, ...

  3. 小甲鱼python猜题_[Python]小甲鱼Python视频第033课(except)课后题及参考解答

    # -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. "&quo ...

  4. python就业视频_[Python] python就业班 900集 视频学习教

    01基础\* }+ F/ M- b6 v0 x) F( j% S 02Python核心编程\ 03数据结构与算法\5 C0 ~5 l2 x; S# k2 Z" a/ _" {) q ...

  5. python私有变量_[Python]Python中的私有变量

    什么是private StackOverflow上有一个备受关注的问题,想必也是很多刚从Java等支持面向对象范式的编程语言转来的同学想问的:Python的类是否可以定义私有变量(private va ...

  6. 查python的软件_[Python实战]Python制作天气查询软件

    以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 开发环境Python3 PyQt5 requests 准备工作 首先要获取 ...

  7. python udp 直播_[Python] socket发送UDP广播实现聊天室功能

    原博文 2018-11-24 12:33 − 一.说明 本文主要使用socket.socket发送UDP广播来实现聊天室功能. 重点难点:理解UDP通讯流程.多线程.UDP广播收发等. 测试环境:Wi ...

  8. python数据比例_#python# #数据分析# 性别比例分析

    手头有一份性别比例的样本数据,清洗后只保留了性别信息,做了一个数据分析. 数据清洗和数据统计的代码就不贴了,贴性别比例pie图和性别比例趋势图的代码. 性别比例pie图: def _plot_gend ...

  9. 初识python教学反思_[python第一课]初识python

    print("1.第一章:初识python\npython历史:\n1.python是用c语言写的\n2.python是可以调用c语言库函数\n3.Python1.0是1994年1月\n4. ...

  10. python的对象模型_[ Python 源码剖析] 对象模型概述

    Python 是一门 面向对象 语言,实现了一个完整的面向对象体系,简洁而优雅. 与其他面向对象编程语言相比, Python 有自己独特的一面. 这让很多开发人员在学习 Python 时,多少有些无所 ...

最新文章

  1. XML DOM – 导航节点概述
  2. linux 环境下,yum 安装redis
  3. 阿里云物模型层初始化代码实现
  4. C语言实现通用链表初步(四)----双向链表
  5. Oracle 10R2 研究--db_file_multiblock_read_count对成本的影响
  6. java 自定义异常的回顾
  7. 为什么要破坏JVM的双亲委派模型
  8. 使用NGUI来制作技能的CD冷却效果
  9. c创建python虚拟机_cpython大致数据结构实现笔记
  10. sqlserver的存储过程mysql_mysql,sqlserver存储过程的创建及执行
  11. 怎么能更好地利用好大数据分析
  12. Python3 sorted自定义排序
  13. VMware9 绿色破解版 下载地址
  14. 单片机波形发生c语言,51单片机波形发生器程序设计
  15. 百度内部发文:砥砺风雨坚守使命的背后
  16. 解决VMware虚拟机由于不小心更改文件路径导致的桌面图标变白,运行exe程序显示找不到路径的错误
  17. Python高级-前端-01-HTML和CSS
  18. 使用IDEA编写Java程序时遇到的小提醒Common part can be extracted from ‘if‘
  19. 6pen Art - AI绘画平台
  20. qq音乐会员联合会员都有哪些

热门文章

  1. linux ext4文件系统超级块损坏修复
  2. Jenkins与网站代码上线
  3. isset和empty区别
  4. 测试架构师: 软件测试架构师应该做和不该做的事情
  5. 炫酷的canvas粒子文字js特效
  6. Nginx 配置TCP代理
  7. 网页版腾讯地图搜索地点定位
  8. 斗地主的制牌、洗牌和发牌
  9. IDL 二维数组/图像的Sen斜率实现
  10. DOM操作造成的页面卡顿问题及解决