python命令行参数

在python开发中,我们经常会遇到在执行代码时,需要给代码传参的情况。
遇到传参的场景,最基础的传参方式为*.py argv1 argv2 ...,然后我们在代码中通过sya.argv来解析入参。
这样使用没有问题,但是不严谨、不正式,更不够帅气…谁知道你这些参数是干嘛的?
其实python基于sys.argv的命令行参数,存在三个模块getopt --> optprase --> argprase。今天咱们来说说处于命令行模块顶峰的argprase

来看一个最基础的python命令参数效果:

入门五板斧

关于ArgumentParser

ArgumentParser用于创建解析器对象,它提供了很多可选参数:

Object for parsing command line strings into Python objects.
Keyword Arguments:

  • prog -- The name of the program (default: sys.argv[0])

  • usage -- A usage message (default: auto-generated from arguments)

  • description -- A description of what the program does

  • epilog -- Text following the argument descriptions

  • parents -- Parsers whose arguments should be copied into this one

  • formatter_class -- HelpFormatter class for printing help messages

  • prefix_chars -- Characters that prefix optional arguments

  • fromfile_prefix_chars -- Characters that prefix files containing
    additional arguments

  • argument_default -- The default value for all arguments

  • conflict_handler -- String indicating how to handle conflicts

  • add_help -- Add a -h/-help option

  • allow_abbrev -- Allow long options to be abbreviated unambiguously

其中description用于添加对程序的描述,使用较多,其他的作为了解即可:

  • prog - 程序的名字(默认:sys.argv[0])

  • usage - 描述程序用法的字符串(默认:从解析器的参数生成)

  • description - 参数帮助信息之前的文本(默认:空)

  • epilog - 参数帮助信息之后的文本(默认:空)

  • parents - ArgumentParser 对象的一个列表,这些对象的参数应该包括进去

  • formatter_class - 定制化帮助信息的类

  • prefix_chars - 可选参数的前缀字符集(默认:‘-‘)

  • fromfile_prefix_chars - 额外的参数应该读取的文件的前缀字符集(默认:None)

  • argument_default - 参数的全局默认值(默认:None)

  • conflict_handler - 解决冲突的可选参数的策略(通常没有必要)

  • add_help - 给解析器添加-h/–help 选项(默认:True)

精髓:add_argument

add_argument作为整个模块的重头戏,我们需要仔细学习。
完整格式如下:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
  • name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。

  • action - 命令行遇到参数时的动作,默认值是 store。

  • nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional - - - argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。

  • const - action 和 nargs 所需要的常量值。

  • default - 不指定参数时的默认值。

  • type - 命令行参数应该被转换成的类型。

  • choices - 参数可允许的值的一个容器。

  • required - 可选参数是否可以省略 (仅针对可选参数)。

  • help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.

  • metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.

  • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
    add_argument 用于添加入参,其中分为定位参数可选参数,如何区别?

定位参数

比如我们程序每次必须要求先输入用户名,那么我们可以这么写:

我们可以这么输入:

  • a.py qingfeng 123

  • a.py qingfeng 123 -v 1.0

  • a.py -v 1.0 qingfeng 123

  • a.py 123 -v 1.0 qingfeng # 注意这条

定位参数可以使用,但最好你的代码中,只存在一个定位参数,不然会出现最后一条例子的问题,你只要求我必须要输入参数,而没有要求我的输入顺序。这种情况我们还不如使用可选参数来明确规定**-u -p **来的更为直观,在理否?

可选参数

何为可选参数?在add_argument中添加以一个或者两个中划线“-”开头的参数,为可选参数(前提是你无聊到修改ArgumentParser中的prefix_chars参数)。eg:'-v'或者'--version'。
这两种可选参数使用时需注意的是,如果同时存在-v 和--version。用户可以使用任意一种方式进行传参,但我们在获取参数的时候,只能使用args.version才能获取对应的值。

action='store_true'

我们平时在使用命令行参数时,有些参数是无需传值的,比如最简单的ls -l
可如果这么操作,系统会报错啊。该如何是好?

parser.add_argument('-v', '--version', action='store_true', help="get version")

我们只需要将action赋值store_true,即可。

参数的默认值

当我们通过add_argument添加一个参数时,parser.parse_args()中就会初始化一个对应的参数,并进行赋值。
默认为None。上面说的action='store_true'时,默认参数为False。
当然我们可以通过default来变更默认的None为我们所想要的值

参数限制

这个用到的比较多,比如我们的代码,提供了对工具的安装、卸载、启动、停止等功能。我们可以这么操作…

parser.add_argument('-t', '--type', choices=['install','uninstall','start','stop'])

用户通过-t只能填写choices内部的指令,不然会提示invalid choice:入参错误
又比如,我们程序需要用户提供一个端口信息,端口必然是一个数字。针对端口是否为数字,我们可以获取参数后使用isinstance(port,int)来判断,但这样相当于重造了个轮子,argparse提供了type选项,可以在用户入参时,就直接校验,无需你再二次判断了!demo:

parser.add_argument('-p', '--port', type=int)

当我们输入-p abc时,模块会给出提示:error: argument -p/--port: invalid int value: 'abc'

将可选参数变为必选

其实很简单:

parser.add_argument('-u','--user',required=True,help="input username")

如果为填写该参数,则会提示:the following arguments are required: -u/--user

作者:华为云享开发者  清风Python

对于python命令行参数使用,你应该这么做才专业相关推荐

  1. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  2. Python命令行参数解析模块getopt使用实例

    这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参考下 格式 getopt(args, options ...

  3. git 忽略__pycache___容易被忽略的 Python 命令行参数

    上周编写了一个 Python 脚本用于将一堆包含 oracle dmp 文件的 rar 压缩包恢复到 oracle 数据库.由于 oracle dmp 文件恢复速度较慢,通过 nohup commad ...

  4. 【Python】Python3.7.3 - Python命令行参数详解

    文章目录 Python命令行参数概览 -c cmd参数示例 -m mod参数示例 file参数示例 - 参数示例 命令行选项详解 -b 选项 -B选项 -d选项 -E选项 -h / -? / --he ...

  5. python 代码命令大全-Python 命令行参数

    Python 命令行参数 Python 提供了 getopt 模块来获取命令行参数. $ python test.py arg1 arg2 arg3 Python 中也可以使用 sys 的 sys.a ...

  6. python 命令行 参数_Python命令行参数

    python 命令行 参数 Python Command line arguments are input parameters passed to the script when executing ...

  7. python命令行参数 空格_Python 命令行参数

    Python 命令行参数 Python 提供了 getopt 模块来获取命令行参数. $ python test.py arg1 arg2 arg3 Python 中也可以使用 sys 的 sys.a ...

  8. Python 命令行参数:Argparse 与 Click

    Python 命令行参数:Argparse 与 Click 简介 一.Argparse 模块 1.1 概念 1.2 基础 1.3 位置参数介绍 1.4 可选参数介绍 1.5 短选项 1.6 结合位置参 ...

  9. 一日一技python安装_一日一技:快速实现Python 命令行参数

    一日一技:快速实现Python 命令行参数 摄影:产品经理 厨师:kingname 我们有时候需要使用 Python 开发一些命令行工具,并在运行命令的时候指定一些参数,例如: python3 xxx ...

最新文章

  1. python之 启动一个子进程并等待其结束
  2. openerp学习笔记 context 的应用
  3. 三维建模:方法之CSG与B-Rep比较
  4. Ajax全接触(1)
  5. laravel5.4 刷新过快,出现The only supported ciphers are AES-128-CBC and AES-256-CBC
  6. 2、VMware vCenter Server5.1功能介绍与安装
  7. 图解+笔记-4.2.1 字符串获取操作、字符串合并和重复操作
  8. php api json查错,PHP Paypal REST API - 错误:JSON解析错误:意外的EOF
  9. 编程在线--- 网站(IT技术学习、面试、交流)上线了
  10. 【TSP】基于matlab蚁群算法求解旅行商问题【含Matlab源码 1130期】
  11. 《MySQL必知必会》学习笔记——第四章(检索数据)
  12. 台式计算机摄像头插哪,台式电脑摄像头怎么调试
  13. iOS11 如何防止用户录屏?
  14. html转pdf文件下载之最合理的方法支持中文
  15. 使用Jasypt对SpringBoot配置文件加密(数据源为SpringBoot默认的数据源HikariDataSource)
  16. 什么是加密?什么是md5加密算法?
  17. 如何选择日志审计系统
  18. PHP打包下载多文件
  19. 计算机论文的摘要和关键词是什么意思,论文中的摘要和关键词是什么
  20. unity PUN PhotonView莫名奇妙viewID冲突

热门文章

  1. 视觉SLAM笔记(39) 求解 ICP
  2. 树莓派3B+ Ubuntu mate16.04 开启热点
  3. oracle有时慢连接不上,Oracle 连接有时候慢,应用稍微一忙,偶尔出现连接失败 的故障解决过程...
  4. 7,复习,多对多表的三种创建,form组件,cookie,session
  5. 2,上传电影,udp,异常处理,socketserver
  6. 微信授权获取用户openid前端实现
  7. (ZZ)A*算法入门
  8. RTT的线程同步篇——信号量
  9. CCF201509-2 日期计算
  10. Java Web-网页基础-HTML基础