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

一、getopt模块有两个函数,两个属性:

函数:

  • getopt.getopt
  • getopt.gnu_getopt

属性:

  • getopt.error
  • getopt.GetoptError
    这两个属性主要是用来抛出错误信息的,非常友好不是吗?

我们经常用到的是:getopt函数:

getopt.getopt(args, shortopts, longopts=[])
args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv获得
shortopts 是短参数  啥是短参数啊?  类似于 这样:python test.py -h # 输出帮助信息
longopts 是长参数  啥是长参数啊?  类似于 这样:python test.py -help # 输出帮助信息

import getopt
import sysarg = getopt.getopt(sys.argv[1:],'-h',['help'])
print(arg)

结果如下:

root@Kali:~/python# python3.5 test.py -h
([('-h', '')], [])
root@Kali:~/python# python3.5 test.py --help
([('--help', '')], [])
root@Kali:~/python# 

可以看到已经接收了参数。并且做了处理,为啥我传入sys.argv[1:]?

因为sys.argv里的argv[0]是当前脚本的文件名,不需要它去参与,要不然你的选项和选项值无法匹配,问题多多。
假设我要接收一个参数+参数值的选项怎么办?

#!/usr/bin/env python3.5
import urllib.request
import getopt
import sysopts,args = getopt.getopt(sys.argv[1:],'-h-f:-v',['help','filename=','version'])
for opt_name,opt_value in opts:if opt_name in ('-h','--help'):print("[*] Help info")exit()if opt_name in ('-v','--version'):print("[*] Version is 0.01 ")exit()if opt_name in ('-f','--filename'):fileName = opt_valueprint("[*] Filename is ",fileName)# do somethingexit()

运行测试结果如下:

root@Kali:~/python# python3.5 test.py --filename=test
[*] Filename is  test
root@Kali:~/python# python3.5 test.py --filename=
[*] Filename is
root@Kali:~/python# python3.5 test.py --help
[*] Help info
root@Kali:~/python# python3.5 test.py --version
[*] Version is 0.01
root@Kali:~/python# python3.5 test.py -v
[*] Version is 0.01
root@Kali:~/python# python3.5 test.py -f test
[*] Filename is  test
root@Kali:~/python#

来详细解释一下这几行代码
首先从短参数名开始。
我定义了'-h-f:-v' 大家发现没有,在-f后面多了一个":"
这个":"代表了当前参数是有值的,是一个参数名+参数值的参数
如果我再加一个-o: 那么证明-o后面是可以接收一个值,这个值就是-o的参数值,将会保存到opts变量中。
长参数名的方式和短参数差不多,唯一的区别就是长参数如果要接收值,那必须得在后面加上一个"="

短参数使用的时候是参数名[空格]参数值
长参数使用的时候是参数名=参数值
PS:不理解可以看我的测试结果

opts与args:

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

eg:

#!/usr/bin/env python
#-*- coding:utf-8 -*-import sys
import getoptlist=['-t','192.168.26.216','-r',256,'-p',80]
args=['-h','-o','file','--help','--output=out','file1','file2']
opts, arg = getopt.getopt(args, "ho:", ["help", "output="])#"ho:"也可以写成'-h-o:'
print(opts)
print(arg)for o, a in opts:if o in ("-h", "--help"):sys.exit()if o in ("-o", "--output"):output = a

输出结果:

E:\testPython\venv\Scripts\python.exe E:/testPython/a111/test1.py
[('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]
['file1', 'file2']Process finished with exit code 0

python中getopt函数详解相关推荐

  1. python中init函数详解_Python 中__init__函数以及参数self

    Java网站链接:Java全栈工程师 | 以实例驱动学习 | how2j.cn 1)class类包含: 类的属性:类中所涉及的变量 类的方法:类中函数 2) __init函数(方法) 1.带有两个下划 ...

  2. Python中匿名函数详解

      匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合.通常情况下,这样的函数只使用一次.在Python中,使用 lambda 表达式创建匿名函数,其语法格式如下: r ...

  3. python中sum函数详解

    python3中sum的用法 python内置的sum函数 对象是列表,元组,集合,可以混合起来使用 >>>sum([1,2,3],2)8>>>sum((1,2,3 ...

  4. python中zip函数详解_Python中zip函数用法

    看openstack的代码,遇到一个内建函数zip不明白其意思: # Adjust the weights in the grid by the functions weight adjustment ...

  5. python读取数据的函数详解_你了解文件缓存机制吗?磁盘文件如何读写?Python中open函数详解...

    我们知道,在使用Python打开一个文件时,一般使用的是open()函数,但是你真正了解这个函数么?文件打开后如何进行缓存?对于大文件它是如何处理的?今天,小编带你来详细了解一下-- Python如何 ...

  6. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  7. Python 中 int 用法详解

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  8. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  9. chatgpt赋能python:Python取ln函数详解:用法及常见问题解答

    Python取ln函数详解:用法及常见问题解答 Python取ln函数是一种非常常用的数学函数,它可以帮助开发者在计算中处理数据的自然指数对数.本篇文章将会介绍Python中取ln函数的基础知识,让您 ...

最新文章

  1. 7-5 表格输出 (C语言)
  2. jconsole工具使用----jvm内存泄漏问题
  3. 特权级——保护模式的特权级检查 DPL,RPL,CPL, 一致代码段,非一致代码段
  4. Collection和Collections之间的使用与区别
  5. 企业云计算架构--笔记
  6. adb命令查看手机电量_desired Capabilities和aapt命令查看手机包信息
  7. 利用 MPI 求素数个数
  8. JDK 9 发布仅数月,为何在生产环境中却频遭嫌弃?
  9. css贝塞尔曲线 多个点_了解贝塞尔曲线的数学和Python实现示例
  10. 爱创课堂每日一题第四十八天- html5有哪些新特性、移除了那些元素?
  11. 边学边写,琐碎记载oracle
  12. NISP一级2023年最新题库
  13. Delphi--“Range check error“ 错误解决方案之一
  14. 全国所有省市区联动sql(包含台湾、香港、澳门)
  15. jpg转pdf怎么转换?
  16. 教你破解已转换为EXE格式的Bat
  17. 看漫画用什么软件最好?另外,好看的百合漫画有哪些?
  18. 996下的程序员,该如何保证自己的身体健康?
  19. Eclipse,STS系列IDE 启动阻塞,启动一直加载问题
  20. 跟循泰国国内游宣传曲MV,像本地人一样游曼谷

热门文章

  1. Spring中的5种Aop常见应用方式(扫描注解方式)
  2. 严恭敏PSINS工具箱航位推算DR解读
  3. 网络找不到自己计算机,电脑搜不到自己家的wifi怎么办?
  4. redirect_uri 参数错10003
  5. 计算机领慧讲堂背景图片,在考生文件夹下打开文档WORD.DOCX。
  6. Python 操作文档之请假条
  7. linux 树莓派 月光宝盒,和我一起玩树莓派3B+--Centos系统安装(五)
  8. Pikachu 的 Xss 靶场 全 通过笔记
  9. c执行cmd pdf2swf_swftools实现pdf文档转swf文件 解决中文乱码
  10. 机器学习笔记(3)---K-近邻算法(1)---约会对象魅力程度分类