argparse的简单使用

简单记录一下argparse的用法

这个是针对我做区块链的一些demo时需要用到的,仅把用到了的一些操作记录,argparse很强大,更多细致的操作可以参考:https://docs.python.org/zh-cn/3/library/argparse.html#module-argparse


位置参数介绍

argparse模块如其名字一样,可以对命令行参数进行解析,可以让人轻松编写用户友好的命令行接口

ls命令进行举例

localhost:~# ls
bench.py    hello.c     hello.js    readme.txt
localhost:~# ls -l
total 16
-rw-r--r--    1 root     root           114 Jul  6 01:47 bench.py
-rw-r--r--    1 root     root            76 Jul  3 17:15 hello.c
-rw-r--r--    1 root     root            22 Jun 26 17:27 hello.js
-rw-r--r--    1 root     root           151 Jul  6 01:49 readme.txt
localhost:~# ls -a
.             .ash_history  .mozilla      bench.py      hello.js
..            .cache        .wine         hello.c 

我们使用ls命令时通过添加其后不同的参数,我们可以得到不一样的结果。

在我们自己学习或者开发的过程中,也能会需要一些命令行参数,来方便我们操作,而argparse这个模块正是用来实现这种功能的。


首先我们先来看一个最简单的例子:

import argparse

if __name__ == '__main__':
    parse = argparse.ArgumentParser()
    parse.add_argument('echo')
    args = parse.parse_args()
    print(args.echo)
(base) D:>python ArgparseLearn.py
usage: ArgparseLearn.py [-h] echo
ArgparseLearn.py: error: the following arguments are required: echo

(base) D:>python ArgparseLearn.py Hello
Hello

以上是代码以及测试和输出。

我们来解析一下代码部分:

  • 首先创建一个ArgumentParser类,这个类的作用是用于将命令行字符串解析为Python对象的对象,原文是:Object for parsing command line strings into Python objects
  • 之后我们添加一个叫做'echo'的参数,注意,这个echo只是参数的名字,并非值,类似于键值对的key,而value需要我们输入命令时自己添加上去。
  • parse_args这个函数会把参数以某种形式传给我们设置的变量args
  • 最后输出args中我们之前设置的echo参数

而再看我们的测试部分:

​ 当我们未携带参数的时候显示了error,而当我们带了参数Hello时则将其输出到终端。

故这种设置参数的方法会使得我们在使用命令时必须携带参数


可选参数介绍

使用以上方法并不能像ls命令一般,需要参数则添加,不需要则不添加。所以我们需要知道如何设置可选参数。再来看一份示例代码:

import argparse

if __name__ == '__main__':
    parse = argparse.ArgumentParser()
    parse.add_argument('--echo')
    args = parse.parse_args()
    print(args.echo)
(base) D:>python ArgparseLearn.py
None

(base) D:>python ArgparseLearn.py --echo Hello
Hello

这份代码相比于之前的位置参数的代码,只是在设置参数的时候添加了'--',故设置可选参数时,我们只需在参数名前添加'--'即可

再来观察测试。若是我们没有选择可选参数,我们发现结果为None,所以当我们没有选择可选参数时,可选参数默认为None.而当我们添加可选参数,则会将我们所赋的值给args。

短选项

但是细心的你是不是还发现这个于ls命令还是有所区别?在ls命令中,我们使用的是ls -a这种短选项命令,而显然,我们现在还未实现这种做法。那么看接下这份代码:

import argparse

if __name__ == '__main__':
    parse = argparse.ArgumentParser()
    parse.add_argument('-e', '--echo')
    args = parse.parse_args()
    print(args.echo)
(base) D:>python ArgparseLearn.py
None

(base) D:>python ArgparseLearn.py --echo Hello
Hello

(base) D:>python ArgparseLearn.py -e Hello
Hello

再次对比这次的代码与之前的,会发现,仅仅是add_argument()方法中多添加了一个'-e'参数,所以设置短选项就是添加一个类似于'-e'的参数即可。而且'-e'和'--echo'的位置可以交换,不影响。


之前的三种方式咱们可以单独使用,也可以一起混合使用,看大家需求。

接下来介绍一些add_argument()其中的另外一些参数,帮助我们更好的实现我们的所需。

  • help,help参数可以在他人不知道如何使用该参数去操作时给予说明和解释。例如:

    import argparse
    
    if __name__ == '__main__':
        parse = argparse.ArgumentParser()
        parse.add_argument('-e', '--echo', help="Print the word")
        args = parse.parse_args()
        print(args.echo)
    
    (base) D:>python ArgparseLearn.py --help
    usage: ArgparseLearn.py [-h] [-e ECHO]
    
    optional arguments:
      -h, --help            show this help message and exit
      -e ECHO, --echo ECHO  Print the word
    
  • type,type参数可以规定我们参数的类型,默认是字符串格式,在实现某些功能时我们希望传入的参数可能时int类型或者其他的,就可以通过此参数实现。示例如下:

    import argparse
    
    if __name__ == '__main__':
        parse = argparse.ArgumentParser()
        # 测试1
        # parse.add_argument('-s', '--square', help="Calculate the square of a number")
        # 测试2
        parse.add_argument('-s', '--square', type=int, help="Calculate the square of a number")
        args = parse.parse_args()
        print(args.square**2)
    
    (base) D:>python ArgparseLearn.py -s 2
    Traceback (most recent call last):
      File "ArgparseLearn.py", line 7, in <module>
        print(args.square**2)
    TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
    
    (base) D:>python ArgparseLearn.py -s 2
    4
    

    通过结果我们可以看出,测试1直接将2视为了字符串,所以报错,而测试2添加了type参数后则将2视为Int类型。

  • default,还记得之前的可选参数的例子把,当我们没有选择某个可选参数时,可选参数的值为None,但是在实际运用的时候,我们不能让参数是None,这时候我们就需要设置默认值,那么就可以使用default方法,如下例:

    import argparse
    
    if __name__ == '__main__':
        parse = argparse.ArgumentParser()
        parse.add_argument('-s', '--square', type=int, help="Calculate the square of a number", default=2)
        args = parse.parse_args()
        print(args.square**2)
    
    (base) D:>python ArgparseLearn.py
    4
    
    (base) D:>python ArgparseLearn.py -s 4
    16
    

更多的参数可以参考源码或者文档:

以上就是所有内容了,内容比较简单,但是却可以满足平常的很多的需求,想要更多功能的可以参考本文开头的文档。希望本文对你有帮助。

posted @ 2020-08-16 16:50  凡璞  阅读(173)  评论(0编辑  收藏  举报
1 2
3 4
5 6