python中的argparse模块入门

举报
黄生 发表于 2021/06/11 10:55:48 2021/06/11
【摘要】 argparse模块,是一个太常用的模块,所以不得不去熟悉它。而且实际一点,在modelarts的代码规范中,自己的代码和Modelarts操作界面上,也有大量的通过argparse来传递数据和参数。所以如果不了解argparse的化,很有必要现在来了解它了。首先argparse是标准模块,因为它要解决的问题是如此广泛。我们不必安装就可以使用它。import syssys.argv['/ho...

argparse模块,是一个太常用的模块,所以不得不去熟悉它。
而且实际一点,在modelarts的代码规范中,自己的代码和Modelarts操作界面上,也有大量的通过argparse来传递数据和参数。
所以如果不了解argparse的化,很有必要现在来了解它了。

首先argparse是标准模块,因为它要解决的问题是如此广泛。我们不必安装就可以使用它。

import sys
sys.argv
['/home/ma-user/anaconda3/lib/python3.6/site-packages/ipykernel/__main__.py',
 '-f',
 '/home/ma-user/.local/share/jupyter/runtime/kernel-b7f73dbc-7fb7-450b-8767-551798b9686a.json']
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
usage: __main__.py [-h]
__main__.py: error: unrecognized arguments: -f /home/ma-user/.local/share/jupyter/runtime/kernel-b7f73dbc-7fb7-450b-8767-551798b9686a.json

An exception has occurred, use %tb to see the full traceback.
SystemExit: 2

/home/ma-user/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2918: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
  warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

parser只有一个参数选项可以不用做什么就可以使用,那就是 -h 或 --help

这里要先说明一点,这里不是执行python命令来调用执行py源代码文件,而是使用Notebook来做交互式的执行

这2种方式下,sys.argv是不一样的,notebook因为交互的原因,argv天然就含有三个元素

所以在notebook里使用parse_args()时,会给它手工传入参数args而不使用argv,类型是list,元素类型是string。也可以省略参数名称args

参考: argparse模块如何在jupyter notebook中用于传参?

parser.parse_args(['-h'])
usage: __main__.py [-h]

optional arguments:
  -h, --help  show this help message and exit

有一种参数叫做位置参数,像它的名字一样,参数的位置很重要,也可以理解为出现的位置,或出现的顺序,很重要。
举个例子,cp命令,第一个出现的参数是被拷贝的源目标,第二个是拷贝到的目的目标。所以位置不同,含义就不一样。位置决定了含义。

现在不能偷懒了,让我们动起来,手动指定一个参数

parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
parser.parse_args(args=['-h'])
usage: __main__.py [-h] echo

positional arguments:
  echo        echo the string you use here

optional arguments:
  -h, --help  show this help message and exit
args = parser.parse_args(['abcd'])
print(args.echo)
abcd

这里手工传入的字符串加了引号,因为这是一个数据类型,字符串就要加引号;但是在调用python执行,传入的参数是不需要加引号的。
argparse默认把传递的参数当作字符串,所以我们这里手工传入的参数都是字符串。下面是将参数转换为Int来处理。

parser = argparse.ArgumentParser()
parser.add_argument('square',help='display a square of a given number',type=int)
args=parser.parse_args(['20'])

print(args.square**2)
400

然后来看看可选参数,可选参数中有一种标志参数,类似于一种开关。比较合适的使用方式是,指定时为开,不指定时为关。
比如–verbose选项,是否输出更多的详细信息

parser = argparse.ArgumentParser()
parser.add_argument('--verbose',help='more verbose output',action='store_true')
args=parser.parse_args(['--verbose'])
if args.verbose:
    print('verbose on')
verbose on
parser.parse_args(['-h'])
usage: __main__.py [-h] [--verbose]

optional arguments:
  -h, --help  show this help message and exit
  --verbose   more verbose output

store_true是开关标志,如果参数出现就设置为True,否则False,手工给值时还会报错;而不使用store_true时,可选参数没有出现时,设置为None

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。