Python自带库 argparse库学习

Python 库学习 argparse

此库用来解析命令行选项,参数和子命令。

与sys.argv相比,它可以直接把命令行解析成想要参数,相当于在sys.argv的基础上又加了一层。我们接收到参数后免于sys.argv[0], sys.argv[1]去解析。比较适应于写一些通用性的脚本。

此整个库浓缩为3个函数,整体用法如下:

1、生成对象

parser = argparse.ArgumentParser()

2、设置如何解析命令行,也就是说设置如何把命令行参数转成我们的参数

parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

3、 执行具体的参数解析,解析后的参数就放在args里面了,直接调用即可。args里面的key键就是第二步设置的参数名

args = parser.parse_args()

从此处可以看出,这部分的难度就是第二步,如何写一个参数,使得它可以把命令行解析成我们想要的样子。

下面我给出一些例子,从例子中去了解。如果例子没有包含你的需求,可以去访问此网站,对每个参数进行了详细的解释:https://docs.python.org/3/library/argparse.html#nargs

 

例子1:获取版本信息

parser.add_argument(    '--version',    action='version',    version='Pecan %s' % '2')
​
args = parser.parse_args()
print(str(args))
​
python test.py --version
['test.py', '--version']
Pecan 2

在此例子中是增加一个参数信息,--version。当命令解析到命令行选项 --version时,就会执行action中的操作。

action的操作可以是一个自写的继承argparse.Action的类,也可以是内置的。此处version动作是内置的,他是打印出version参数中的内容。

 

例子2:在输入命令行时,要求命令是各种实际名称,但是代码中从解释器取变量时,却要求是同一个变量名去取

在使用add_argument时添加dest关键字

eg:

parser.add_argument(    '-add ',    dest='command_argv',)
parser.add_argument(    '-del ',    dest='command_argv',)

此处有两个命令,-add -del,解析参数都,后面的参数都放到command_argv变量中

D:\document\coder\learn argparse>python test.py -add 1
['test.py', '-add', '1']
Namespace(command_argv='1')
​
D:\document\coder\learn argparse>python test.py -del 1
['test.py', '-del', '1']
Namespace(command_argv='1')

 

例子3:可选与必选

在add_argument参数中,第一个参数也是必要的参数,是这个参数的名字,然后保存起来,尽管可以用dest参数去修改。

但是有些参数,我们是必须的,比如文件名。很简单,他第一个参数如果加了‘-’则表示是可选的,不加‘-’则是必选。你说我的参数名带了‘-’这个字符怎么搞?木有关系,这个识别符是可以改的,在生成这个对象的时候就需要定义好,如下所示

>>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
>>> parser.add_argument('+f')
>>> parser.add_argument('++bar')
>>> parser.parse_args('+f X ++bar Y'.split())
Namespace(bar='Y', f='X')

可选与必选的演示如下所示

parser = argparse.ArgumentParser(prog='PROG')
​
parser.add_argument('--foo')
parser.add_argument('bar')
print(parser.parse_args(['BAR']))
# 只有一个参数进入时,自动分配给必须要的bar变量
Namespace(bar='BAR', foo=None)
​
# 都有时,把定义了时-foo的分配给foo,另外一个分配给bar
parser.parse_args(['BAR', '--foo', 'FOO'])
Namespace(bar='BAR', foo='FOO')
​
# 当不给他bar分配参数时,则出错了
parser.parse_args(['--foo', 'FOO'])
usage: PROG [-h] [-f FOO] bar
PROG: error: the following arguments are required: bar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值