当前位置: 首页 > news >正文

转:python的命令行输入参数

转自:http://blog.sina.com.cn/s/blog_70ac7daa0100x0kp.html

 

opts, args = getopt.getopt(sys.argv[1:], "t:s:h", ["walletype=", "servicename=",'help'])
for a,o in opts:
    if a in ('-t', '--walletype'):
        walle_type = o
    elif a in ('-s', '--servicename'):
        service_name = o
    elif a in ('-h', '--help'):
         help = True

其中t:s:h表示参数的缩写,:表示参数后需要传值

walletype=,servicename=,help表示参数的全称,=表示后面需要传值 

 

首先,
import getopt
import sys
然后,
opts,args=getopt.getopt(sys.argv[1:],"hi:l:",["help", "interval=","list="])

1.使用的是getopt中的函数getopt(),其中有三个输入参数。第一个参数sys.argv是程序输入的以逗号分隔的全部参数列表(字符串列 表),与c语言类似,sys.argv[0]是程序名,因此有效地输入参数是从第二个开始,因此这里写成sys.argv[1:],即除程序的所有输入内 容列表.
2.第二个参数是短格式参数定义部分.当一个选项后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":"号。上例中表明,参数-h,后面无附加参数,而-i和-l后面必须接续一个附加参数.
3.第三个参数用来定义长格式.该参数是可选的.该列表中的参数如果后面需要跟附加参数写成形如"list=",即有"=",其功能相当于上一项中的":",否则进写出参数名如"help"即可.
4.getopt函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。
例如 输入 pyname -i 10 -l c p wn
其中 pyname 代表程序的文件名, 则程序调用getopt后返回的列表值为:
opts : [('-i', '10'), ('-l', 'c')]
args : ['p', 'wn']

 

如果, 输入 pyname -i -l c p wn, 则
opts: 

[('-i', '-l')]
args:  ['c', 'p', 'wn']
可见由于定义-i后面有附加参数,getopt将把-i之后紧挨着的参数是为其附加参数作为对应元组的第二项内容.这是进行参数解析处理中需要特别注意的地方.

如果, 输入-h, -i, -l以外的参数时,getopt会异常返回,而非想象中的也将对应的参数写进opts列表中.
再如, 输入 pyname -i, getopt也会异常返回.
这样程序变得不可控,怎么办? 所以,需要对上面的使用方法进行改造:

try:
     opts,args=getopt.getopt(sys.argv[1:],"hi:l:",["help", "interval=","list="])
except getopt.GetoptError:
      print "Error "#info as you want to give out
      sys.exit()
[...]# 对附加参数的进一步分析处理.即输入参数在语法意义上合法,但不一定在语义意义上合法.例如
for opt,value in opts:
 
  if opt == "-i":
      if not(value.isdigit()):#-i后面的附加参数应该是数字
          print "after -i, should be integer "
          sys.exit()
      else:
          interval=int(value)
   [...]

补充:如果你觉得输出的异常错误信息提示不够好,或者你发现在不加except之前,getopt.GetoptError自动输出的错误是你想要的怎么办?
将except 分支简单修改一下:

except getopt.GetoptError as e:
    print e.msg
    sys.exit()
如此,就不用自己在except分支下分各种情况进行处理了。

 

转载于:https://www.cnblogs.com/isen1988/articles/4493061.html

相关文章:

  • 微一微博的应用项目源码
  • DOM操作
  • Python:利用内建函数将字符串转化为整数
  • NSMutableAttributedString iOS 在UILabel显示不同的字体和颜色(转)
  • 详解如何正确的搭建Linux的服务器集群
  • Java知识点陈列
  • sql server 复制表从一个数据库到另一个数据库
  • Java设计模式-工厂方法模式(Factory Method)
  • 【Win10】开发中的新特性及原有的变更
  • 2014年最新的辛星html、css教程打包公布了,免积分,纯PDF(还有PHP奥)
  • 代码添加控件-从数据库提取数据
  • ARM中的中断
  • 手势密码源码
  • java工程师联通XX面试题目
  • 连载《一个程序猿的生命周期》-15.老婆怀孕,养家压力,离职请求
  • 【附node操作实例】redis简明入门系列—字符串类型
  • ECMAScript6(0):ES6简明参考手册
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript新鲜事·第5期
  • jquery cookie
  • STAR法则
  • 安卓应用性能调试和优化经验分享
  • 浮动相关
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何实现 font-size 的响应式
  • 使用API自动生成工具优化前端工作流
  • 使用Gradle第一次构建Java程序
  • 小程序button引导用户授权
  • 一个JAVA程序员成长之路分享
  • 怎么将电脑中的声音录制成WAV格式
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (3)STL算法之搜索
  • (ibm)Java 语言的 XPath API
  • (TOJ2804)Even? Odd?
  • (多级缓存)缓存同步
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (剑指Offer)面试题34:丑数
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 未来三学期想要修的课 (日記)
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core中Emit的使用
  • .Net Remoting常用部署结构
  • .net 按比例显示图片的缩略图
  • @AliasFor注解
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ JavaScript ] JSON方法
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [20180224]expdp query 写法问题.txt
  • [BeginCTF]真龙之力
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [C++]二叉搜索树
  • [C++]命名空间等——喵喵要吃C嘎嘎