简单记录一下argparse的用法

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


位置参数介绍

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

ls命令进行举例

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

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

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


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

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

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

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

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

而再看我们的测试部分:

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

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


可选参数介绍

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

  1. import argparse
  2. if __name__ == '__main__':
  3. parse = argparse.ArgumentParser()
  4. parse.add_argument('--echo')
  5. args = parse.parse_args()
  6. print(args.echo)
  1. (base) D:>python ArgparseLearn.py
  2. None
  3. (base) D:>python ArgparseLearn.py --echo Hello
  4. Hello

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

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

短选项

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

  1. import argparse
  2. if __name__ == '__main__':
  3. parse = argparse.ArgumentParser()
  4. parse.add_argument('-e', '--echo')
  5. args = parse.parse_args()
  6. print(args.echo)
  1. (base) D:>python ArgparseLearn.py
  2. None
  3. (base) D:>python ArgparseLearn.py --echo Hello
  4. Hello
  5. (base) D:>python ArgparseLearn.py -e Hello
  6. Hello

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


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

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

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

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

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

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

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

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

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

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

argparse的简单使用的更多相关文章

  1. python中argparse模块简单使用

    python中argparse模块简单使用 简介 argparse是python用于解析命令行参数和选项的标准模块.argparse模块的作用是用于解析命令行参数. 使用步骤 1.首先导入该模块 2. ...

  2. Argparse简易教程

    Argparse简易教程 原文:Argparse Tutorial 译者:likebeta 本教程是对于Python标准库中推荐使用的命令行解析模块argparse的简单介绍. PS:还有其他两个模块 ...

  3. python 命令行参数——argparse模块的使用

    以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...

  4. python学习之argparse模块的使用

    以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...

  5. 【python】argparse学习(转)

    点击这里成为作者 · 更新于 2018-11-14 21:00:36 argparse argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数, ...

  6. python命令行解析函数

    sys.argv 在终端运行python 1.py hahah import sys print(sys.argv) # ['1.py', 'hahah'] argparse Python的命令行解析 ...

  7. python argparse模块解析命令行选项简单使用

    argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argpars ...

  8. Python标准模块--argparse

    1 模块简介 你一定很奇怪Python是如何命令行中的变量的吧?argparse就是用来解决这个问题的,argparse是optparse的替代. 2 模块使用 2.1 开始 我发现解释一个编程的概念 ...

  9. Python解析命令行读取参数 -- argparse模块

    在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...

随机推荐

  1. 记录一下网上找到的别人写的angualr总结

    感觉写的不错,所以讲链接保存下来 https://www.jianshu.com/p/f0f81a63cbcb

  2. .Net Core使用IdentityServer4

    官方文档https://identityserver4.readthedocs.io/en/latest/ 参考https://www.cnblogs.com/i3yuan/p/13843082.ht ...

  3. Winform程序及dll打包成一个可执行的exe

    使用场景 通常开发的Winform程序,引用了其他类库后,在输出目录下都会产生很多DLL文件,exe执行时必须依赖这些DLL.想要Winform程序只有一个可执行exe文件,又不想打包成安装包,就可以 ...

  4. 蚂蚁开源的 SOFABoot,和 Spring Boot 有啥关系?

    一.SOFABoot 是什么鬼? 说到 SOFABoot,不得不先说下 SOFARPC 框架,SOFARPC 也是大名远扬,最早起源于阿里淘宝 HSF 框架,现在是蚂蚁金服开源的一款高性能.高可扩展性 ...

  5. 用python写注入漏洞的poc

    webug靶场一道简单的注入题 加点后报错 could not to the database You have an error in your SQL syntax; check the manu ...

  6. MongoDB插入数据,除去Class key

    本文来源于: 来源:CSDN 原文:https://blog.csdn.net/ClementAD/article/details/50849680 去除class字段的本质为设置 DefaultMo ...

  7. Linux 网卡 bonding配置

    网卡 bonding配置 目录 网卡 bonding配置 一.bonding技术 bonding的七种工作模式 总结: 二.Centos7配置bonding 1.关闭和停止NetworkManager ...

  8. 不想加班开发管理后台了,试试这个 Java 开源项目吧!

    本文适合有 Java 基础并了解 SpringBoot 框架的同学 本文作者:HelloGitHub-嘉文 这里是 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款开 ...

  9. Blazor VS 传统Web应用程序

    原文作者: Christian Findlay 原文链接: https://christianfindlay.com/2020/07/09/blazor-vs-traditional-web-apps ...

  10. Oracle 锁表以及解锁

    -- kill_exec 列为解锁的语句,copy出来执行即可.select 'alter system kill session ''' || s.sid || ',' || s.serial# | ...