[学习]探究python命令行(一)

首先感谢HelloGitHub以及众多大神们。因为接下来我所学习的python argparser 是来自HelloGitHub公众号的分享,我也结合自身知识点盲区,和大家一起学习整理。

HelloGitHub面向编程新手的项目,每月 28 号以月刊的形式更新发布。内容包括:流行项目、入门级项目、企业级项目等,这些开源项目大多都是非常容易上手、很 Cool,能够让你用很短时间感受到编程的魅力和便捷。

那么就进入正片~

前言

本文章使用 python 3.7作为解释器进行分享。

IDE:PyCharm 2019.3.3 (Community Edition)

本文将介绍如何使用 Python 内置的 argparse 标准库解析命令行。

argparse 作为 Python 内置的标准库,提供了较为简单的方式来编写命令行接口。当你在程序中定义需要哪些参数,argparse 便会从 sys.argv 中获取命令行输入进行解析,对正确或非法输入做出响应,也可以自动生成帮助信息和使用说明。

开始

设置解析器

import argparse
parser = argparse.ArgumentParser(description='my cmd line program')

使用 argparse 的第一步是创建一个 ArgumentParser 对象。

ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。

通过实例化ArgumentParser,接下来我们就可以通过add_argment方法来为解析器设置参数信息。

定义参数

add_argment具体有哪些参数呢?
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 所需要的常量值。针对action中的store_const和append_const而出现。其实对于那些需要接值的参数,预                先存储一个值,如果没有则取用这个值。

default - 不指定参数时的默认值。
type - 命令行参数应该被转换成的类型。
choices - 参数可允许的值的一个容器,例如choices=[1,5,10] 表示输入参数只能为1或5或10。
required - 可选参数是否可以省略 (仅针对可选参数),当required为True时,在输入命令时需要显示该参数。
help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息。
metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称。
dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线。

 

我就搬来公众号上的例子,解析一下:

parser.add_argument('nums', metavar='num', type=int, nargs='+', help='a num for the accumulator')

添加了“nums”参数,在帮助(-h)说明中会显示为"num     a num for the accumulator",nums参数的类型为int类型,nums可以有1个或多个,即可以输入多个int类型的数据

parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the nums(default:find the max)')

添加了“--sum”参数,该参数对应的属性为“accumulate”,当输入了“--sum”时,accumulate对应sum函数;若不提供,accumulate对应max函数,而它的帮助信息为:sum the nums(default:find the max)

 

解析命令行

定义好参数后,就可以使用 ArgumenteParser.parse_args 方法来解析一组命令行参数字符串了。

args = parser.parse_args()

默认情况下,不用增加参数,而参数取会自 命令行敲入的一段命令(不含文件名)所对应的一个字符串列表。

比如,若你输入 python3 myparser.py --sum 1 2 3,那么 sys.argsv[1:] 就是 ['--sum', '1', '2', '3']

当然,也可以通过 parse_args 入参来指定一组命令行参数字符串

args = parser.parse_args(['--sum', '-1', '0', '1'])

 

业务处理

解析好命令行后,我们就可以从解析结果中获取每个参数的值,进而根据自己的业务需求做进一步的处理。比如,对于上文中所定义的 nums 参数,我们可以通过解析后的结果中的 accumulate 方法对其进行求最大值或求和(取决于是否提供 --sum 参数)。

整理一下代码:

import argparse
parser = argparse.ArgumentParser(description='my cmd line program')

parser.add_argument('nums', metavar='num', type=int, nargs='+', help='a num for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=min,
                    help='sum the nums(default:find the max)')
args = parser.parse_args()
result = args.accumulate(args.nums)
print(result)

 

感谢

https://blog.csdn.net/chenguiyuan1234/article/details/84799388

https://blog.csdn.net/drievn/article/details/70821188

https://www.cnblogs.com/baihualin/p/10344526.html

https://blog.csdn.net/drievn/article/details/70821188

https://mp.weixin.qq.com/s/Guz0xDOArbrVGCZMCwx2cg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值