python Argparse 模块入门

argparse是python标准库里面的用来处理命令行参数的库

位置参数和选项参数

先了解位置参数和选项参数的概念,以linux中’ls’命令为例

[root@openstack_1 /]# ls
bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@openstack_1 /]# ls root/
anaconda-ks.cfg  devstack  index.html  install.log  install.log.syslog
[root@openstack_1 /]# ls -l
总用量 86
dr-xr-xr-x.   2 root root  4096 41 22:42 bin
dr-xr-xr-x.   5 root root  1024 41 22:43 boot
drwxr-xr-x.  18 root root  3880 46 15:24 dev
drwxr-xr-x.  77 root root  4096 46 15:24 etc
drwxr-xr-x.   3 root root  4096 42 20:50 home
dr-xr-xr-x.  15 root root 12288 41 22:42 lib
drwx------.   2 root root 16384 326 20:59 lost+found
drwxr-xr-x.   2 root root  4096 923 2011 media
drwxr-xr-x.   2 root root  4096 923 2011 mnt
drwxr-xr-x.   3 root root  4096 42 21:03 opt
dr-xr-xr-x. 128 root root     0 46 2015 proc
dr-xr-x---.   5 root root  4096 42 21:05 root
dr-xr-xr-x.   2 root root 12288 41 22:42 sbin
drwxr-xr-x.   7 root root     0 46 2015 selinux
drwxr-xr-x.   2 root root  4096 923 2011 srv
drwxr-xr-x.  13 root root     0 46 2015 sys
drwxrwxrwt.   3 root root  4096 46 15:24 tmp
drwxr-xr-x.  12 root root  4096 326 21:03 usr
drwxr-xr-x.  18 root root  4096 326 21:04 var

第一次调用ls没有使用参数 第二次调用使用了’root/’作为参数 第三次调用使用了 ‘-l’ 选项 其中 ‘root/’是代表的位置参数 而’-l’是选项参数。所谓位置参数就是程序根据该参数出现的位置来确定其意义,比如上上面的例子中 可以是’root/’ 也可以是’bin/’ 等等 二:选项参数是应用程序已经设提前定义好的参数,比如’-l’就是 ls 命令的一个选项 用户在使用选项参数是 必须要使用命令定义好的选项参数,而不是自己随意指定。

使用示例

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

执行脚本

$python main.py

$python main.py -h
usage: main.py [-h]

optional arguments:
  -h, --help  show this help message and exit

上面的代码中 第一次执行 没有加参数 不输出任何内容
的二次执行 加上 -h参数 则输出 帮助信息
上面的例子中对程序的描述比较简单,可以自己加上对程序的描述信息

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.parse_args()
$ python main.py -h
usage: main.py [-h]

say something about this application !!

optional arguments:
  -h, --help  show this help message and exit

对比之前的输出 可以看到多出了一句话 ,这一句话就是在argparse.ArgumentParser()函数中新加的参数

好了 现在准备给应用程序增加参数了,先说位置参数

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name')
parser.parse_args()
$python main.py
usage: main.py [-h] name
main.py: error: too few arguments

我们在程序程序中设置了一个位置参数’name’ 这样的话 在运行程序时就需要指定一个位置参数 否则就会像上面那样报错

$python main.py taylor

运行正确 下面增加 -h选项 查看帮助文档

$python main.py taylor -h
usage: main.py [-h] name

say something about this application !!

positional arguments:
  name

optional arguments:
  -h, --help  show this help message and exit

对比之前的输出 发现多了一个 positional arguments: 帮助项 并且有一个name字段 表示这个程序需要指定一个name的位置参数。那么现在你可能想要告诉程序的使用者这个name参数怎么用。想要实现这个功能 只需要按照下面的方式来修改

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name',  help="i can tell you how to set a name argument")
parser.parse_args()
$python main.py taylor -h
usage: main.py [-h] name

say something about this application !!

positional arguments:
  name        i can tell you how to set a name argument

optional arguments:
  -h, --help  show this help message and exit

可以看到name字段已经多了一个关于该字段的描述

好了现在可以考虑获取用户传入的值了

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name',  help="i can tell you how to set a name argument")
result = parser.parse_args()

print(result.name)
$python main.py taylor
taylor

对比程序和输出结果 发现我们已经得到了用户输入的值。注意,python获取的值默认都是字符串类型的,无论用户输入的是数字还是字符串。考虑下面的程序

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name',  help="i can tell you how to set a name argument")
result = parser.parse_args()

print(type(result.name))
$python main.py taylor
<type 'str'>
$python main.py 123456
<type 'str'>

由上面比较可知, 无论用户输入数字还是字符串 在python的返回中都是字符串类型的,如果需要作为其他类型变量来使用,那么需要先转换成相应的类型,比如 用int(xx)转换成整数。如果需要指定用户类必须输入某种类型, 那么可以这样做:

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name', type=int,  help="i can tell you how to set a name argument")
result = parser.parse_args()
print(result.name)
print(type(result.name))
$python main.py taylor
usage: main.py [-h] name
main.py: error: argument name: invalid int value: 'taylor'
$python main.py 123456
123456
<type 'int'>

对比上面的程序和运行结果 可知 当指定了参数类型, 当用户传入了一个错误类型的参数 程序会报错退出 否则程序正常执行 并且将结果转换成相应的数据类型


使用选项参数

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("--age", help="this is an optional argument")
result = parser.parse_args()
print(result.age)
$python main.py -h
usage: main.py [-h] [--optional OPTIONAL]

say something about this application !!

optional arguments:
  -h, --help           show this help message and exit
  --age OPTIONAL  this is an optional argument

帮助输出包含了对age选项的说明

$python main.py  --age
usage: main.py [-h] [--optional OPTIONAL]
main.py: error: argument --age: expected one argument

只指定了age选项 但是没有制定该选项的值 则会报错

$python main.py  --age 888
888
$python main.py  --age=888
888

指定age的值为888 在程序中可以获取到输入值

$python main.py
None

如果选项参数 不指定值 那么 默认获取到的值是None

可以给选项参数设置简称 比如

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("-a","--age", help="this is an optional argument")
result = parser.parse_args()
print(result.age)
$python main.py  -a 888
888

可以向上面那样使用短标签
当然有时候一个选项参数只是作为一个开关的作用,而不需要指定具体的值, 如果使用了该选项则表示打开某个功能,否则表示关闭。

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("-a", "--age", help="this is an optional argument", action="store_true")
result = parser.parse_args()
print(result.age)
$python main.py  -a 888
usage: main.py [-h] [-a]
main.py: error: argument -a/--age: ignored explicit argument '888'

如果此时给-a选项指定参数值,则会导致程序报错

$python main.py  -a
True

指定了选项 则为true

$python main.py
False

没使用选项 则为False

也可以指定选项值为指定列表中的值

import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("-a", "--age", help="this is an optional argument", type=int, choices=[0, 1, 2])
result = parser.parse_args()
print(result.age)

在程序中 指定了 age 参数类型为int 并且只能是0,1,2三个数中的其中一个

$python main.py -a 2
2

使用2作为参数值则正确输出

$python main.py -a 5
usage: main.py [-h] [-a {0,1,2}]
main.py: error: argument -a/--age: invalid choice: 5 (choose from 0, 1, 2)

使用5作为参数值 因为5不在指定的列表当中 所以会导致报错

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值