一、如何让python脚本支持命令行参数

1、使用click模块

如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.html

2、使用getopt模块

getopt模块可短选项和长选项两种格式。
短选项格式为"-"加上单个字母选项;
长选项为"--"加上一个单词

3、click和getopt的不同点

  1. click模块是第三方的模块,而getopt是内置的模块
  2. click模块的功能比较强大,自带的--help参数,提醒功能比较优美
  3. click模块可以对命令行参数进行一些限制
  4. getopt模块是内置的模块,对于一些简单的要求比较方便

二、getopt模块的使用

1、介绍

getopt模块需要配合sys模块一起使用,再多的语言都是苍白的,直接看例子解释吧

2、例子

# 此脚本名称为: test.py
import sys
import getopt def help_msg():
"""
自定义帮助信息(click模块就不需要自定义帮助信息,直接可用--help)
:return: 各个参数的说明
"""
print('usage:')
print('-h, --help: print help message.')
print('-o, --output: output file')
print('-c, --cfg: config') def main(argv):
# 没有给命令行参数,直接退出python脚本,不执行
if len(argv) <= 1:
help_msg()
sys.exit(0) try:
opts, args = getopt.getopt(argv[1:], 'ho:c:', ['help', 'output=', 'cfg='])
except getopt.GetoptError as err:
print(str(err))
sys.exit(2) print("额外信息args:%s" % str(args)) for o, a in opts:
if o in ('-h', '--help'):
help_msg()
sys.exit(1)
elif o in ('-o', '--output'):
# 创建输出文件
print("参数是:%s; 值是:%s" % (o, a))
elif o in ('-c', '--cfg'):
# 添加配置文件信息
print("参数是:%s; 值是:%s" % (o, a))
else:
print('unhandled option')
sys.exit(3) if __name__ == '__main__':
main(sys.argv) # 在服务器上或者window的cmd上执行下面的命令是正确的:
python test.py -h
python test.py --help
# 这两个结果都是
"""
usage:
-h, --help: print help message.
-o, --output: output file
-c, --cfg: config
""" python test.py -o a.txt -c config.cfg
python test.py --output a.txt --cfg config.cfg
# 结果
"""
额外信息args:[]
参数是:-o; 值是:a.txt
参数是:-c; 值是:config.cfg 额外信息args:[]
参数是:--output; 值是:a.txt
参数是:--cfg; 值是:config.cfg """ # 下面这个是错误的
python test.py -a
# 结果
"""
option -a not recognized
"""

3、解释

1.函数的使用

opts, args = getopt.getopt(argv[1:], 'ho:c:', ['help', 'output=', 'cfg='])

1, getopt()是处理的函数。

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

3,第二个参数(字符串),代表的是短格式,'ho:c:',每一个英文字母代表一个短格式的命令行参数,字英文母后面有冒号":"的代表有附加参数
没有冒号的代表一个开关选项,即这里的 'h' 代表开关选项,不需要附加参数,'o'和'c'有附加的参数

4, 第三个参数(列表),代表的是长格式,['help', 'output=', 'cfg='],列表每一个元素代表一个长格式的命令行参数,长格式串也可以有开关状态,即后面不跟"="号。
如果有等号则表示后面还应有一个附加参数。这个长格式表示"help"是一个开关选项;"output="则表示后面应该带一个参数。

5, 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数,即不是按照getopt()里面定义的长或短选项字符和附加参数以外的信息。
opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。

6, 当命令行分析出错时,会抛出getopt.GetoptError异常。

2.选项写法

短格式: "-"号后面要紧跟一个选项字母。如果还有此选项的附加参数,可以用空格分开,也可以不分开。长度任意,可以用引号。
长格式: "--"号后面要跟一个单词。如果还有些选项的附加参数,可以用空格分开,也可以用"=",再加上参数。"="号前后不能有空格

3.使用

python test.py --output a.txt --cfg config.cfg hello world
"""
额外信息args:['hello', 'world']
参数是:--output; 值是:a.txt
参数是:--cfg; 值是:config.cfg
"""

如何让python脚本支持命令行参数--getopt和click模块的更多相关文章

  1. Python 处理脚本的命令行参数-getopt

    # -*- coding:utf-8 -*- import sys def test(): """ 参数列表:sys.argv 参数个数:len(sys.argv) 脚本 ...

  2. 为python脚本增加命令行参数

    from argparse import ArgumentParser p = ArgumentParser() p.add_argument('-b', '--body', help='Return ...

  3. powershell脚本,命令行参数传值,并绑定变量的例子

    这是小技巧文章,所以文章不长.但原创唯一,非常重要.我搜了下,还真没有人发 powershell怎样 [命令行 参数 绑定],所以我决定写成博客. 搜索关键字如下: powershell 命令行 参数 ...

  4. Win32程序支持命令行参数的做法(转载)

    转载:http://www.cnblogs.com/lanzhi/p/6470406.html 转载:http://blog.csdn.net/kelsel/article/details/52759 ...

  5. Win32程序支持命令行参数的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先说说Win 32 API程序如何支持命令行参数.Win 32程序的入口函数为: int APIENTRY _tWi ...

  6. Python 处理脚本的命令行参数(二):使用click

    安装click pip install click 使用步骤 使用@click.command() 装饰一个函数,使之成为命令行接口 使用@click.option() 等装饰函数,为其添加命令行选项 ...

  7. appium+python自动化59-appium命令行参数

    Appium服务器参数 许多Appium 1.5服务器参数已被弃用,以支持--default-capabilities标志. 用法: node . [flags] help 1.cmd端口输入,app ...

  8. python中处理命令行参数的模块optpars

    optpars是python中用来处理命令行参数的模块,可以自动生成程序的帮助信息,功能强大,易于使用,可以方便的生成标准的,符合Unix/Posix 规范的命令行说明.使用 add_option() ...

  9. python argparse:命令行参数解析详解

    简介 本文介绍的是argparse模块的基本使用方法,尤其详细介绍add_argument内建方法各个参数的使用及其效果. 本文翻译自argparse的官方说明,并加上一些笔者的理解 import a ...

随机推荐

  1. Http和Https之为什么Https更安全

    [除夕了,加油干.希望自己新的一年万事顺意,祝大家身体健康,心想事成!] 我们都知道 HTTPS 安全,可是为什么安全呢? 看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,因为Https相 ...

  2. spring-cloud-netflix-eureka-server

    一.构建springcloud父pom工程,管理版本 pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  3. HDU 3681 Prison Break(状压DP + BFS)题解

    题意:一张图,F是起点,Y是必须要到的点,D不能走,G可以充电.可以往四个方向走,每走一步花费一个电,走到G可以选择充满电或者不充,每个G只能充一次.问你走遍Y的最小初始点亮.number(G) + ...

  4. 【DP】区间DP入门

    在开始之前我要感谢y总,是他精彩的讲解才让我对区间DP有较深的认识. 简介 一般是线性结构上的对区间进行求解最值,计数的动态规划.大致思路是枚举断点,然后对断点两边求取最优解,然后进行合并从而得解. ...

  5. [转]论基于DSSA的软件架构设计与应用

    [摘要]   去年三月份,我所在的公司启动国网电力用户用电信息采集系统项目,我被任命为项目负责人.国网电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分.由于公司之前为南网(主要是广东省) ...

  6. GPU 加速 & WebGL

    GPU 加速 & WebGL 开启 GPU 加速, 硬件加速 垃圾面试官,瞎忽悠 holy shit 美国想象力英语,前端 leader WebGL 加速 ??? 是什么鬼 ??? three ...

  7. shit 牛客网

    shit 牛客网 为什么,只可以 log 一次,什么垃圾逻辑呀! https://www.nowcoder.com/test/question/e46437833ddc4c5bb79f7af7a1b7 ...

  8. Java NIO wakeup实现原理

    本文转载自Java NIO wakeup实现原理 导语 最近在阅读netty源码时,很好奇Java NIO中Selector的wakeup()方法是如何唤醒selector的,于是决定深扒一下wake ...

  9. 图像仿射变换——MatLab代码实现

    这里先说一下我们的目的,最近在用Pix2Pix 做一个项目的时候,遇到了成对图像质量差,存在着特征不能对齐的问题,即A图与B图是一组成对图像,我们想要将A 图中的物体转化为B 图中的物体,但这个物体在 ...

  10. jdbc连接数据库(oracle、mysql)

    很简单,直接贴代码吧!代码注释自认为足够理解! 第一步创建数据库连接类,数据库连接地址.数据库驱动.用户名.密码建议创建为公共变量,方便修改,一目了然. package db; import java ...