在很多情况情况下,使用的python脚本是需要根据需求设定数值的,但是每次都跑到py脚本里更改源码会显得非常的愚蠢,而且很容易出问题,所以我们需要从命令行获取所需的参数。
python中获取命令行参数的方法有很多,早先的sys模块的argv就是其中之一,而后的getopt模块的getopt方法,以及今天重点讲的argparse模块。
这里对于只需要一个参数(一般是文件名)的脚本,使用argv会比较方便。对使用多个参数的脚本,推荐使用argparse模块,更加方便和易懂。
sys模块
在sys模块中,使用sys.argv即可获取命令行参数
首先创建一个test.py的文件,其中代码如下:
在如下命令中,sys.argv会获取命令行中的三个参数+文件名,所以 len(sys.argv)=4。很容易看出循环接下来要打印sys.argv[1]、sys.argv[2]、sys.argv[3]这三个值。
因为命令行参数顺序的问题使得使用时比较麻烦,而且对也没有参数提示,在有多个参数的时刻显得比较无力,但是对单一参数时,比如只需要文件名时,就可以很轻易的使用sys.argv[1]获取文件名
argparse模块
这里不讲getopt,因为argparse比他好用很多。
argparse使用过程比较简单,首先实例化一个argparse.ArgumentParser()对象,然后往对象中add设定的参数,然后将参数返回到一个命名空间中,最后赋给对应的变量。具体代码如下:
测试:
这里我设定了定位参数x,并在最后赋给了x,并将x打印出来,可以看到,我在使用 -h参数后,argparse会自动将帮助文档显示出来。
以上是对单一没有指定参数的设定,但是很多时候,我们的py脚本的参数会很多,所以经常看到有人用。这里使用短参数来获取命令行参数,这样就不会怕顺序搞错了导致脚本出错。
以上是我脚本中参数设置的一部分,这里我向脚本中添加了三个可选参数,每个参数都既写了短参数也写了长参数,同时我在help中写了每个参数的帮助文档。size是我的可选参数,默认值为 100,也可通过-s参数进行修改。对于每一个参数我都利用type设置了数据类型,防止格式出错。
执行情况:
这里我图简单所以最后执行时只打印了size,因为是可选参数,所以没有输入inputfile和outputfile也没有关系,但是如果在正常脚本里,这里是会用到inputfile和outputfile的,程序就会出错。如果想要在最开始就提示输入的话,可以使用第一个定位参数,或者在脚本中写上判断inputfile是否为空值的条件,若为空值则跳出程序并打印错误。
以上是argparse的基础操作,剩下还有更多的详情我就不一一赘述,详情可以前往https://www.jianshu.com/p/fef2d215b91d
领取专属 10元无门槛券
私享最新 技术干货