论吃苦

和朋友聊天,说到了学习的问题。不知道何时听过一句话,因为不想吃生活的苦,所以我忍受着学习的苦。生活的苦只要躺着就能吃到,而学习的苦却要我们逼着自己去吃。每天下班回来等到孩子睡了开始学习,学的差不多了再开始写博客,然后发公众号,天天两三点让最近的身体有些吃不消,光坐班车睡过站就好几次,司机现在都认识我了,到站先喊下我。牛气...一分耕耘不一定会有一分收获,但要想有所收获,只能靠持续的付出才有机会...努力!
昨天吧python字符串相关的方法进行了总结,说实话零碎的知识点太多,统计、分类、整理、最后一个个的说明花了2个多小时的时间。但整体串过一遍,对之前的知识又进行了一次查漏补缺,温故而知新,还不错...
今天和大家聊聊python命令行参数,虽然使用场景没有字符串多,但细节觉得成败,当别人看到你提供更优雅的调用方式时,会对你的严谨点赞。此时,深藏功与名!升堂...

python命令行参数

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

入门五板斧

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/6/25 23:58
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : 11.python_argparse_cookbook.py# 导入模块
import argparse# 实例化解析器对象
parser = argparse.ArgumentParser(description='python argparse cookbook')
# 添加参数
parser.add_argument('-v', '--version', help="get version")# 获取参数集合
args = parser.parse_args()# 打印参数值
print("User input code version is: {}".format(args.version))

关于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 用于添加入参,其中分为定位参数与可选参数,如何区别?

定位参数

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

import argparseparser = argparse.ArgumentParser(description='python argparse cookbook')parser.add_argument('user', help="input username")
parser.add_argument('pwd', help="input password")
parser.add_argument('-v', '--version', help="get version")args = parser.parse_args()print(args.user)
if args.version:print(args.version)

我们可以这么输入:

  • 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

The End

可能有些人要说,selenium系列是不太监了,只能说这个系列看的人太少了,有空了间隔着更新吧...
OK,今天的内容就到这里,如果觉得有帮助,欢迎将文章或我的微信公众号【清风Python】分享给更多喜欢python的人,谢谢。

来源:清风Python 作者:王翔

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

  1. 使用python命令行参数sys.argv 做bat脚本

    首先要了解什么是命令行参数 1 2 import sys,os os.system(sys.argv[1]) #这个例子os.system接收命令行参数,运行参数指令, # cmd命令行带参数运行py ...

  2. 对于python命令行参数使用,你应该这么做才专业

    python命令行参数 在python开发中,我们经常会遇到在执行代码时,需要给代码传参的情况. 遇到传参的场景,最基础的传参方式为*.py argv1 argv2 ...,然后我们在代码中通过sya ...

  3. 退出python命令行-退出python命令

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 在linux环境下退出python命令模式原创 2016年11月03日 ...

  4. python命令行大全-用什么库写 Python 命令行程序(示例代码详解)

    一.前言 在近半年的 Python 命令行旅程中,我们依次学习了 argparse . docopt . click 和 fire 库的特点和用法,逐步了解到 Python 命令行库的设计哲学与演变. ...

  5. 自己写的python软件可以在哪发布-如何发布一个Python命令行工具

    本文简介 上次写的一个终端里面斗鱼TV弹幕Python版本和Ruby版本,并且发布到PIP和RubyGems上面.在发布PIP包的时候,居然Google不到一篇可以非常好的讲解这个流程的文章.于是整理 ...

  6. python 基础命令-Python 命令行(CLI)基础库

    在 CLI 下写 UI 应用 前阵子看了一下自己去年写的 Python-视频转字符动画,感觉好糗..所以几乎把整篇文章重写了一遍.并使用 curses 库实现字符动画的播放. 但是感觉,curses ...

  7. Python 命令行传参

    Python 命令行传参 说到 python 命令行传参,可能大部分人的第一反应就是用 argparse.的确,argparse 在我们需要指定多个预设的参数(如深度学习中指定模型的超参数等)时,是非 ...

  8. python 命令行 模块_深入浅析Python 命令行模块 Click

    Click 是用 Python 写的一个第三方模块,用于快速创建命令行.我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argpa ...

  9. 如何编写完美的 Python 命令行程序?

    这篇文章将教你如何编写完美的 Python 命令行程序,提高团队的生产力,让大家的工作更舒适. 作者 | Yannick Wolff 译者 | 弯月 责编 | 屠敏 出品 | CSDN(ID:CSDN ...

最新文章

  1. IOS swift项目的单例模式.swift5以后的单例模式
  2. python定时器库_Python定时器完整示例 python定时器用法举例
  3. Tomcat架构与原理
  4. Zend Framework实例教程三
  5. C++查漏补缺之流状态
  6. 使用tortoiseGit对GitHub添加公钥
  7. 大数据技术将是传统企业创新的原点
  8. endnote 参考文献加序号_求助endnote 中 文末的参考文献 序号中如何设置成带中括号的 [序号]...
  9. 报错:Internal error XFS_WANT_CORRUPTED_GOTO at line 1635 of file fs/xfs/libxfs/xfs_alloc.c.
  10. linux开源炫酷命令行工具,Linux上超酷的命令行扩展工具Oh My Zsh
  11. 数据治理的四字箴言:理、采、存、用
  12. sketchup 图片转模型_Sketchup位图转模型插件安装包及视频教程
  13. CSS 盒子模型box-sizing
  14. 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)
  15. Ubuntu 20.04.2.0 LTS 更改默认关联视频播放器VLC的方法
  16. Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major错误解决
  17. Java语言是 解释执行 的语言吗
  18. 1.python自动化登录12306
  19. 爆肝1个多月,严选10大热门静态博客框架,官方文档、教学视频、经典案例、热门插件一应俱全,强烈建议收藏
  20. Cocos Creator 微信小游戏 填坑记录

热门文章

  1. ubuntu php 关闭警告,ubuntu部署OWASP Mutillidae II php WARING
  2. blob数据类型_MySQL 8.0 基本操作步骤:3.字段和数据类型的选择
  3. matlab贝塞尔函数的根,matlab画贝塞尔函数根分布的曲线图.doc
  4. 码风改变计划(暂定)
  5. CodeFirst实体类中,为什么都把ICollectionx定义成virtual?
  6. [bzoj] 2049 洞穴勘探 || LCT
  7. Echarts初体验
  8. 比较两个数的大小,自定义比较两个整数的大小的方法
  9. 最短路径之Dijkstra算法
  10. Hadoop源码分析16: IPC流程(11) 整体流程