如何解析命令行中传递进来的参数?
方法一:通过sys(不灵活,不推荐)
Learn_argparse.py
python
import sys
arguments = sys.argv
print(arguments)
- 传入位置参数
bash
# 命令行输入
python learn_argparse.py 1 2
# 输出:返回一个字符串列表,['脚本路径','参数1','参数2',...]
['learn_argparse.py', '1', '2']
- 传入选择参数
bash
# 命令行输入
python learn_argparse.py --a=1 --b=5
# 输出:返回一个字符串列表,['脚本路径','参数1','参数2',...]
['learn_argparse.py', '--a=1', '--b=5']
从上面的两个输出可以看出,sys
模块在解析选择参数时会非常麻烦,需要在返回的列表里手动处理选择参数的选项,而argparse
相较于sys.argv
在解析和处理选择参数时提供了更多的灵活性。
方法二:通过argparse
argparse模块做什么用?
argparse
是 Python 标准库中用于处理命令行参数的模块。支持自动生成帮助信息、参数类型检查、可选和位置参数、默认值等特性。
bash
python test.py 5 dahong #5和dahong就是位置参数,可以传进脚本,供脚本作为变量使用
参数类型
- 位置参数:必传参数
- 选择参数:可选参数
add_argument()方法参数说明
From:师父笔记neeo.cc/python/modules/argparse.html#接收列表形式的参数
python
import argparse
parse = argparse.ArgumentParser(description="this is a test script") # description用来在命令行返回帮助信息
parse.add_argument(
'--user', # 通过 -- 设置参数
type=str, # 可选参数,限制该参数的类型 str、float、int、bool, 默认为 str
required=True, # 可选参数,是否必传
default='张开', # 指定了默认值,但当required=True 时,这个默认值不会生效,因为命令行参数必须由用户提供。
choices=['张开', '张不开', '张小开'], # 可选参数,限制值的范围,传参数时可通过-h或--help查看
help="user argument help info", # 可选参数,返回该参数的帮助信息,传参数时可通过-h或--help查看
nargs='+' #表示该参数接受一个或多个值,并将它们作为列表返回。
)
print(parse.parse_args()) # 获取输入将被parse.parse_args接收
基础使用
python
import argparse
# 创建解释器
parser = argparse.ArgumentParser(description = 'this is a test script')
# 添加选项参数,不是必传参数,可以设定默认值
parser.add_argument('--a',type=int,default=8,help='this is a optional argument a')
# 添加位置参数,必传参数,不需要就不添加位置参数
parser.add_argument('b',type=int,help='this is a positional argument')
args = parser.parse_args()
print(args)
# parser.parse_args()返回的是一个对象,eg:Namespace(a=4, b=1),其中a,b是object的两个属性
arg_a = args.a
arg_b = args.b
print(arg_a,arg_b)
输出1
bash
# 命令行输入
python learn_argparse.py 1 --a=4
# 输出
Namespace(a=4, b=12) # 返回的是一个object类型,a和b为对象的属性
4 12
输出2
bash
# 命令行输入,这俩一样,任选即可
python learn_argparse.py --help
python learn_argparse.py -h
#输出
usage: learn_argparse.py [-h] [--a A] b
this is a test script
positional arguments:
b this is a positional argument
optional arguments:
-h, --help show this help message and exit
--a A this is a optional argument a
usage: learn_argparse.py [-h] [--a A] b
的输出,表示脚本期望的位置参数和选项参数的顺序或格式
-h
是一个自动生成的帮助选项,表示你可以使用-h
或--help
来显示帮助信息。--a A
是一个选项参数,表示这个参数是可选的,并且接受一个值A
(通常会跟在--a
后面)。b
是一个位置参数,它没有标记为可选,意味着它是必需的。
补充
parse.add_argument
方法既可以接收--
开头的参数,也可以接收-
开头的参数,也可以接收没有任何-开头的参数
。 一般有个默认成俗的规矩是--
开头的是设置参数的全名,而-
则是--
的缩写形式,例如--password
简写为-p
:
python
import argparse
# 创建解释器
parser = argparse.ArgumentParser(description = 'this is a test script')
# 添加选项参数,不是必传参数,可以设定默认值
parser.add_argument('--password',type=int,default=8,help='this is a optional argument password')
# 添加选项参数的缩写形式,不是必传参数,可以设定默认值
parser.add_argument('-p',type=int,default=8,help='this is a optional argument p')
# 添加位置参数,必传参数,不需要就不添加位置参数
parser.add_argument('age',type=int,help='this is a positional argument')
args = parser.parse_args()
print(args)
# parser.parse_args()返回的是一个对象,eg:Namespace(a=4, b=1),其中a,b是object的两个属性
arg_password = args.password
arg_p = args.p
arg_age = args.age
print(arg_password,arg_p,arg_age)