看了几个python程序,但凡涉及到从命令行直接读取参数的时候,都有相似的如下代码,例如从命令行读取变量x,y的值
-
import argparse
-
parser = argparse.ArgumentParser()
-
parser.add_argument(
"x", help=
"横坐标",type=int)
-
parser.add_argument(
'y', help=
"纵坐标",type=int)
-
args = parser.parse_args()
作为刚开始学python的小白,我一开始不太明白这段代码干啥用的,所以从网上找了很多博客文章,看了一圈之后感觉还是官网上的解释最详细明了,https://docs.python.org/2/howto/argparse.html,看完之后至少不迷糊了,所以写一个教程防止自己忘了。
这个模块的作用就是从命令行读取参数嘛,那到底是这么读取的呢,首先来看一个简单的程序 ,命名为no.py:
-
import argparse
-
-
import argparse
-
parser = argparse.ArgumentParser()
-
parser.add_argument(
"x", help=
"横坐标",type=int)
-
parser.add_argument(
'y', help=
"纵坐标",type=int)
-
args = parser.parse_args()
-
x=args.x
-
y=args.y
-
print(x,y);
这个程序可以实现从命令行读取x,y的值之后在输出。可以打开cmd,输入样例如下:python no.py 3 4
则出现结果为:
可以看到,程序执行了输出命令print,将x,y的值输出出来。
下面对这几个函数及其中的参数做一下说明。
其实这些函数的默认的参数都有很多,但我看很多程序基本也就用了几个,对一个小程序来说已经足够了。
add_argument()函数
可以看到上面这个函数中有三个参数,
第一个是名称,就是为你读取的变量起一个名字,例如x,y,这个你随便起一个你自己要名字。
第二个是help,这是提示信息,告诉你这个变量是啥东西,怎么看这些信息呢,在命令行输入:python no.py -h
然后就会出现帮助信息了
第三个是type,就是参数的类型嘛,整型,字符型,浮点型,看你想把它作为什么类型的变量了。
到这里我感觉就可以解决绝大多数问题了,但还有一个小地方就是关于那种前面带“-”的那种参数比如说什么“-v”,“-p”,"-h"这种奇怪的东西,一开始我也云里雾里,不知道这些是干嘛用的,然后看完了https://docs.python.org/2/howto/argparse.html之后大概有点明白了。想要弄明白的童鞋可以直接看Introducing Optional arguments 这部分
Optional arguments (可选参数)
上文中提到的这些带“-”的参数形式就是可选参数。
按我自己的理解嘛,这就好比是吃烧烤一样,在你点串儿的时候,烤串师傅一般会问你“放不放辣?”,如果你说放,那他就会在你的串上放上点辣椒面儿。
像“x”,“y”这样的参数就好比你点的串儿,而那些带“-”的就好比是辣椒面儿
比如:参数 x 表示羊肉串儿,那么 在 x 后面加上你自己定义的“-v”,即 x -v 就是加了辣的串,然后如果是 x -vvv,那就是变态辣,
或者你在设一个“-p”,用 x -p 表示加了孜然的羊肉串, x -v -p 就表示加了孜然和辣椒的羊肉串。
下面展示一个实例:
-
import argparse
-
-
import argparse
-
parser = argparse.ArgumentParser()
-
parser.add_argument(
"x", help=
"横坐标",type=int)
-
parser.add_argument(
'y', help=
"纵坐标",type=int)
-
parser.add_argument(
"-v",help=
"x翻倍",action=
"store_true")
-
args = parser.parse_args()
-
if args.v:
-
args.x=args.x*
2;
-
x=args.x
-
y=args.y
-
print(x,y);
如果加了参数 -v ,则x变为输入值的两倍。
还有一种就是 -v 后面带数字,比如 -v 1,-v 2 等等,这时候代码就要修改成
parser.add_argument("-v",help="x翻倍",type=int)
如果是 -vvv这种代码要修改成:
parser.add_argument("-v",help="x翻倍",action="count")
判断条件中的代码也要做相应的修改。详细的过程在链接中都有,想要了解详情的朋友可以自己去看一下。
到这最基本的功能就讲完了,目前只是做一点小程序,所以其他的没怎么看,不过这一点已经够我用的啦。