命令行解析
首先导入命令行解析模块
import argparse
import sys
然后创建对象
parse=argparse.ArgumentParser()
然后增加命令行
对于函数add_argumen()第一个是选项,第二个是数据类型,第三个默认值,第四个是help命令时的说明
parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
parse.add_argument("--max_steps",type=int,default=2000,help="max")
parse.add_argument("--hidden1",type=int,default=100,help="hidden1")
然后解析,其实不需要加入sys.argv[1:],直接arg=parse.parse_args()
arg=parse.parse_args(sys.argv[1:])
其中参数sys.argv[1:]是命令行语句中从第一个到最后。
如在ubuntu下输入命令行python gg.py --learning_rate=20 --max_steps=10
则sys.argv[1:]=['--learning_rate=20', '--max_steps=10'] 是一个列表
输入命令行python gg.py --learning_rate 20 --max_steps 10 ( 一般这些写的形式比较多)
则sys.argv[1:]=['--learning_rate', '20', '--max_steps', '10']
arg=parse.parse_args(sys.argv[1:])
flags,unparsed=parse.parse_known_args(sys.argv[1:])
arg=parse_args()输出的arg为namespace空间,结果是Namespace(hidden1=100, learning_rate=20.0, max_steps=10)
flags, unparsed=parse_known_args()函数输出结果为flags和unparsed,flags同parse_args()输出结果相同,Namespace(hidden1=100, learning_rate=20.0, max_steps=10)
代码
import argparse
import sys
parse=argparse.ArgumentParser()
parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
parse.add_argument("--max_steps",type=int,default=2000,help="max")
parse.add_argument("--hidden1",type=int,default=100,help="hidden1")
arg=parse.parse_args()
print(sys.argv[1:])
print(type(sys.argv[1:]))
print(arg)
print(type(arg))
print(vars(arg)) #vars为返回对象的属性词典
print(arg.learning_rate)
print(arg.max_steps)
print(arg.hidden1)
#命令行
$ python main.py --learning_rate=20 --max_steps=10
#输出
['--learning_rate=20', '--max_steps=10']
<class 'list'>
Namespace(hidden1=100, learning_rate=20.0, max_steps=10)
<class 'argparse.Namespace'>
{'hidden1': 100, 'learning_rate': 20.0, 'max_steps': 10}
20.0
10
100
如果输入python main.py --learning_rate 20 --max_steps 10 一般这样写的形式比较多
除了sys.argv[1:]输出结果为5个元素的列表外,一样可以解析出Namespace(hidden1=100, learning_rate=20.0, max_steps=10)
import argparse
import sys
parse=argparse.ArgumentParser()
parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
parse.add_argument("--max_steps",type=int,default=2000,help="max")
parse.add_argument("--hidden1",type=int,default=100,help="hidden1")
flags,unparsed=parse.parse_known_args(sys.argv[1:])
print(sys.argv[1:])
print(type(sys.argv[1:]))
print(flags)
print(type(flags))
print(vars(flags)) #vars为返回对象的属性词典
print(flags.learning_rate)
print(flags.max_steps)
print(flags.hidden1)
print(unparsed)
#输入
#也可以使用python main.py --learning_rate=20 --max_steps=10,都一样
$ python main.py --learning_rate 20 --max_steps 10
#输出
['--learning_rate', '20', '--max_steps', '10']
<class 'list'>
Namespace(hidden1=100, learning_rate=20.0, max_steps=10)
<class 'argparse.Namespace'>
{'hidden1': 100, 'learning_rate': 20.0, 'max_steps': 10}
20.0
10
100
[]
可以证明:
arg=parse_args()和 flags, unparsed=parse_known_args()用法基本一样,都是解析输出参数的