Skip to content

如何解析命令行中传递进来的参数?

方法一:通过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)