作者: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. ThinkPHP框架介绍
  2. 华为鸿蒙王者荣耀视频,王者荣耀鸿蒙2.0版
  3. UE4 AR开发笔记
  4. 实现编辑功能有哪几个action_Web 应用的撤销重做实现
  5. WinPcap笔记(1):VisualStudio2015配置WinCap
  6. 汇编jnl_汇编指令集
  7. windows文本转语音 通过java 调用python 生成exe可执行文件一条龙
  8. 【note】《软件体系结构》知识整理(1-5章)
  9. shell解决服务器高可用
  10. Oracle,Mysql,Sqlserver数据库连接串(总爱忘,留着备用)
  11. DSP及海思嵌入式板实现gb28181
  12. 微信小程序--获取已发布微信小游戏和小程序源码
  13. ps滑动鼠标放大缩小
  14. AI的下一个战场:认知智能的突围
  15. ABAQUS INP文件详解
  16. 电子入门基础知识之:电阻读数方法
  17. Windows下使用GetOpt函数使用
  18. word转换成excel导致身份证错乱的解决办法
  19. 读书笔记软件调试之道 :问题的核心-重现问题
  20. 数字认证公司的bjca证书报错原因,垃圾产品

热门文章

  1. 安卓手机变成横屏_华为平板M6体验:安卓平板唯一旗舰,强大性能通吃娱乐办公...
  2. 前端开发入门:H5页面需要学什么?
  3. 基于MQTT协议的 org.eclipse.paho.client.mqttv3 源码学习(二)
  4. Unity将模型显示在UI上面
  5. 【利用cloudconvert网站api简单6步骤实现cad文件格式dwg转dxf】
  6. 计算机动态网站毕业论文,个人动态网站
  7. 介绍Docker镜像
  8. react入口文件_React项目文件结构解析
  9. 听说高度近视的人不能打拳击?其实真相是这样的......
  10. postfix邮件列表