1. 传入一个参数
首先新建一个python文件:test.py 打入以下代码进行测试
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个参数')
parser.add_argument('param', type=str, help='参数')
args = parser.parse_args()
print(args)
在命令行中输入python test.py -h 查看帮助信息,得到以下结果:  再加入一个参数hello 来运行,结果如下: 
2. 操作arg字典
这里得到的Namespace(param='hello') 是一种类似于python字典的数据结构 我们可以用args.参数名 来获取参数 代码改为:
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个参数')
parser.add_argument('param', type=str, help='参数')
args = parser.parse_args()
print(args.param)
再次运行,这次的结果为: 
3. 传入多个参数
现在在运行时传入多个参数,例如hello world 试一试  这时程序报错,提示world参数无法识别 我们把程序修改一下,在add_argument() 中加入nargs 参数
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个参数')
parser.add_argument('param', type=str, nargs='+', help='参数')
args = parser.parse_args()
print(args.param)
再次运行程序,程序正常运行  其中nargs='+' 表示参数可设置一个或多个 还可以用nargs='*' 来表示参数可设置零个或多个,nargs='?' 来表示参数可设置零个或一个
4. 改变数据类型
add_argument() 中的type 参数表示传入参数的数据类型,之前我们传入的是字符串,还可以传入其他类型,比如我们将str 换成int 这样我们传入的就是整型数值,传入的参数可以像正常变量一样进行使用运算等 例如运行以下代码
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个参数')
parser.add_argument('param', type=int, nargs='+', help='参数')
args = parser.parse_args()
print(sum(args.param))
结果为 
5. 位置参数
命令行传入的参数是有位置差别的,即传入参数的先后顺序会使得运行结果不同 例如运行以下代码时
import argparse
parser = argparse.ArgumentParser(description='命令行中传入参数')
parser.add_argument('param1', type=str, help='参数1')
parser.add_argument('param2', type=str, help='参数2')
args = parser.parse_args()
print(args.param1 + ' ' + args.param2)
结果为  
这时先传入的参数被识别为param1 ,后传入的参数被识别为param2
而如果把以下两行代码调换顺序
parser.add_argument('param1', type=str, help='参数1')
parser.add_argument('param2', type=str, help='参数2')
运行结果为  这时先传入的hello 被识别为param2 ,后传入的world 被识别为param1
6. 可选参数
为了避免上述位置参数会产生尴尬,毕竟不可能让每个人都记住传参的顺序,我们可以使用可选参数,可选参数类似于关键词传参,但需要在关键词前加--
例如我们运行以下程序
import argparse
parser = argparse.ArgumentParser(description='命令行中传入参数')
parser.add_argument('--param1', type=str, help='参数1')
parser.add_argument('--param2', type=str, help='参数2')
args = parser.parse_args()
print(args.param1 + ' ' + args.param2)
结果为 这时就算我们调换代码顺序或者传参顺序都不会改变运行结果
7. 默认参数
add_argument() 中的default 参数可以为对某个参数设置默认值,当命令行没有传入该参数的值的时候,参数会设为默认值
例如运行以下代码
import argparse
parser = argparse.ArgumentParser(description='命令行中传入参数')
parser.add_argument('--param1', type=str, default='hello', help='参数1')
parser.add_argument('--param2', type=str, default='world', help='参数2')
args = parser.parse_args()
print(args.param1 + ' ' + args.param2)
结果为  
8. 必需参数
add_argument 中的required 参数可以设置某个参数是否为必需 例如运行以下代码
import argparse
parser = argparse.ArgumentParser(description='命令行中传入参数')
parser.add_argument('--param1', type=str, required=True, default='', help='参数1')
parser.add_argument('--param2', type=str, default='world', help='参数2')
args = parser.parse_args()
print(args.param1 + ' ' + args.param2)
结果为  程序报错,显示parm1是必需参数 但是把default 改为False 或去掉default 参数再次运行时结果为  参考文章
|