Python命令行运行脚本时传入参数的方式
Python命令行运行脚本时传入参数的两种方式
1、python script.py 0,1,2 3
2、python script.py --a=0,1,2 --b=3
对应不同的参数解析方式,分别为sys.argv, argparse
(1) sys.argv :sys模块是很常用的模块, 它封装了与python解释器相关的数据
- sys.argv 是命令行参数列表
- len(sys.argv) 是命令行参数个数
- sys.argv[0] 表示脚本名。
使用sys.argv接收上面第一个命令中包含的参数方式如下:
import sys
a = sys.argv[1]
b = sys.argv[2]
print(a, type(a))
print(b, type(b))
执行 python test.py 0,1,2 10结果:
0,1,2 <class 'str'>
3 <class 'str'>
(2)argparse:argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块,可以让用户轻松编写友好的命令行接口
使用的三个步骤:
1、创建一个解析器:即创建ArgumentParser()对象
2、添加参数:即调用add_argument()方法添加参数,格式及主要属性
ArgumentParser.add_argument(name or flags...[, action][, default][, type])
- name or flags: 一个命名或者一个选项字符串的列表,例如 foo(命名:位置参数)或 -f, --foo(旗标flag:可以在命令行里任意位置指定,前者一般为后者的缩略形式(比如查看某些库的版本时既可以使用 x -v 也可以使用 x -—version))
- type :命令行参数应当被转换成的类型(type参数理论上可以是任何合法的类型, 但有些参数传入格式比较麻烦,例如list,所以一般使用bool, int, str, float这些基本类型就行了,更复杂的需求可以通过str传入,然后手动解析。bool类型的解析比较特殊,传入任何值都会被解析成True,传入空值时才为False)
- action:当参数在命令行中出现时使用的动作基本类型(默认值action = ‘store’,代表存储参数的值)
- default :当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值
3、解析参数:即使用parse_args()解析添加的参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("loc", type=str)
parser.add_argument('loc2', type=str, default="5555")
parser.add_argument('--b', type=int, default=0)
parser.add_argument('-n', "--number", type=str, help='输入一个数字') --此时n是number的缩写,参数会存在number中,而不是n中
args = parser.parse_args()
print(args.loc, type(args.loc))
print(args.loc2, type(args.loc2))
print(args.b, type(args.b))
print(args.number, type(args.number))
执行python test.py --b=1 --number=2 3 5
3 <class 'str'>
5 <class 'str'>
1 <class 'int'>
2 <class 'str'>
从上述结果可知位置参数从上述结果可知是由命令行参数的顺序决定的,而参数--b,--number在命令行中何处指定都可以。