python中的argparse模块入门
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
- 点赞
- 收藏
- 关注作者
评论(0)