给python脚本添加命令行参数主要有三种方式:argparse、Fire工具、sys.argv。
目录
1. argparse
2. Fire
3. sys.argv
1. argparse
import argparse
parser = argparse.ArgumentParser(description='Options')
parser.add_argument('-folds', default=9, type=int,
help="num of folds") #9折交叉验证
parser.add_argument('-bs', default=128, type=int,
help="batch size")
opt = parser.parse_args()
print(opt.folds)
上面的脚本如果直接在Pycharm中执行的话,会输出默认值default。
如果想传入新的参数值,一种方式是直接修改脚本中相应参数的default,比较暴力;另一种方式是从命令行传入新的参数值,可以直接打开命令行窗口,执行脚本 python a.py -folds=100。
还可以在Pycharm中,设置命令行参数,这样就可以在Pycharm集成环境中运行了,而且脚本使用的是新的参数:
点击右下角的apply即可,此时在Pycharm中运行脚本,就可以使用命令行参数了。
2. Fire
Fire工具的安装和使用,详情可以查看我的另一篇博客:Fire工具。
简而言之,就是使用Fire工具后,在命令行执行脚本时,可以指定执行脚本中的某个函数,然后以字典的形式,给这个函数传递参数:
def predict(**kwargs):
pass
命令行执行:
python a.py predict --model FastText
上面的命令执行a.py中的predict函数,model参数使用的是FastText。
直接在Pycharm中执行a.py不会有结果,需要像之前一样,先设置参数,再使用Pycharm执行:
3. sys.argv
import sys
print(sys.argv[0]) #当前执行的脚本名称
print(sys.argv[1]) #脚本后跟的命令行参数
#...还可以添加多个命令行参数
可以在命令行执行该脚本,在后面添加参数。
如果直接在Pycharm中执行会报错,因为此时并没有argv[1]这个参数,访问越界。可以像之前一样,先设置参数,再使用Pycharm执行: