python Argparse 模块入门(tuxl_c_s_d_n)
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 4月 1 22:42 bin
dr-xr-xr-x. 5 root root 1024 4月 1 22:43 boot
drwxr-xr-x. 18 root root 3880 4月 6 15:24 dev
drwxr-xr-x. 77 root root 4096 4月 6 15:24 etc
drwxr-xr-x. 3 root root 4096 4月 2 20:50 home
dr-xr-xr-x. 15 root root 12288 4月 1 22:42 lib
drwx------. 2 root root 16384 3月 26 20:59 lost+found
drwxr-xr-x. 2 root root 4096 9月 23 2011 media
drwxr-xr-x. 2 root root 4096 9月 23 2011 mnt
drwxr-xr-x. 3 root root 4096 4月 2 21:03 opt
dr-xr-xr-x. 128 root root 0 4月 6 2015 proc
dr-xr-x---. 5 root root 4096 4月 2 21:05 root
dr-xr-xr-x. 2 root root 12288 4月 1 22:42 sbin
drwxr-xr-x. 7 root root 0 4月 6 2015 selinux
drwxr-xr-x. 2 root root 4096 9月 23 2011 srv
drwxr-xr-x. 13 root root 0 4月 6 2015 sys
drwxrwxrwt. 3 root root 4096 4月 6 15:24 tmp
drwxr-xr-x. 12 root root 4096 3月 26 21:03 usr
drwxr-xr-x. 18 root root 4096 3月 26 21:04 var
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
第一次调用ls没有使用参数 第二次调用使用了’root/’作为参数 第三次调用使用了 ‘-l’ 选项 其中 ‘root/’是代表的位置参数 而’-l’是选项参数。所谓位置参数就是程序根据该参数出现的位置来确定其意义,比如上上面的例子中 可以是’root/’ 也可以是’bin/’ 等等 二:选项参数是应用程序已经设提前定义好的参数,比如’-l’就是 ls 命令的一个选项 用户在使用选项参数是 必须要使用命令定义好的选项参数,而不是自己随意指定。
使用示例
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
1
2
3
执行脚本
$python main.py
$python main.py -h
usage: main.py [-h]
optional arguments:
-h, --help show this help message and exit
1
2
3
4
5
6
7
上面的代码中 第一次执行 没有加参数 不输出任何内容
的二次执行 加上 -h参数 则输出 帮助信息
上面的例子中对程序的描述比较简单,可以自己加上对程序的描述信息
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.parse_args()
1
2
3
$ python main.py -h
usage: main.py [-h]
say something about this application !!
optional arguments:
-h, --help show this help message and exit
1
2
3
4
5
6
7
对比之前的输出 可以看到多出了一句话 ,这一句话就是在argparse.ArgumentParser()函数中新加的参数
好了 现在准备给应用程序增加参数了,先说位置参数
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name')
parser.parse_args()
1
2
3
4
$python main.py
usage: main.py [-h] name
main.py: error: too few arguments
1
2
3
我们在程序程序中设置了一个位置参数’name’ 这样的话 在运行程序时就需要指定一个位置参数 否则就会像上面那样报错
$python main.py taylor
1
2
运行正确 下面增加 -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
1
2
3
4
5
6
7
8
9
10
11
对比之前的输出 发现多了一个 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()
1
2
3
4
$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
1
2
3
4
5
6
7
8
9
10
11
可以看到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)
1
2
3
4
5
6
$python main.py taylor
taylor
1
2
对比程序和输出结果 发现我们已经得到了用户输入的值。注意,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))
1
2
3
4
5
6
$python main.py taylor
<type 'str'>
$python main.py 123456
<type 'str'>
1
2
3
4
由上面比较可知, 无论用户输入数字还是字符串 在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))
1
2
3
4
5
6
$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'>
1
2
3
4
5
6
对比上面的程序和运行结果 可知 当指定了参数类型, 当用户传入了一个错误类型的参数 程序会报错退出 否则程序正常执行 并且将结果转换成相应的数据类型
使用选项参数
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)
1
2
3
4
5
$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
1
2
3
4
5
6
7
8
帮助输出包含了对age选项的说明
$python main.py --age
usage: main.py [-h] [--optional OPTIONAL]
main.py: error: argument --age: expected one argument
1
2
3
只指定了age选项 但是没有制定该选项的值 则会报错
$python main.py --age 888
888
$python main.py --age=888
888
1
2
3
4
指定age的值为888 在程序中可以获取到输入值
$python main.py
None
1
2
如果选项参数 不指定值 那么 默认获取到的值是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)
1
2
3
4
5
$python main.py -a 888
888
1
2
可以向上面那样使用短标签
当然有时候一个选项参数只是作为一个开关的作用,而不需要指定具体的值, 如果使用了该选项则表示打开某个功能,否则表示关闭。
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)
1
2
3
4
5
$python main.py -a 888
usage: main.py [-h] [-a]
main.py: error: argument -a/--age: ignored explicit argument '888'
1
2
3
如果此时给-a选项指定参数值,则会导致程序报错
$python main.py -a
True
1
2
指定了选项 则为true
$python main.py
False
1
2
没使用选项 则为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)
1
2
3
4
5
在程序中 指定了 age 参数类型为int 并且只能是0,1,2三个数中的其中一个
$python main.py -a 2
2
1
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)
1
2
3
使用5作为参数值 因为5不在指定的列表当中 所以会导致报错
查看原文>> 0
看过本文的人也看了:
Python知识结构图
python 安装pip、.whl格式的文件
Python-开发之路-模块
Python:itertools模块
[python学习] 模仿浏览器下载CSDN源文...
Python 图形处理库PIL批量修改图片大...
|
|