在写Python代码的时候,需要传入一些参数,可以灵活的指定,而不是在代码里面写死。
比如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'--flag_int',
type=float,
default=0.01,
help='flag_int.'
)
FLAGS, unparsed = parser.parse_known_args()
print(FLAGS)
print(unparsed)
命令窗口输入:$ python prog.py --flag_int 0.02 --double 0.03 a 1
运行结果如下:
Namespace(flag_int=0.02)
['--double', '0.03', 'a', '1']
==============分析代码======================================
在python中,命令行解析的很好用,
1.首先导入命令行解析模块
import argparse
import sys
2.然后创建对象
parse=argparse.ArgumentParser()
3.然后增加命令行
parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
对于函数add_argumen()第一个是参数别名,在终端时候要输入别名,以及对应的值。第二个是数据类型,第三个默认值,当你没有在终端输入参数的值,会用默认的值。第四个是help命令时的说明,帮你理解参数的作用。
还有一些其他可选参数,比如当 --verbosity
被修改时,这个程序就会输出一些东西,如果没有修改,那么不输出任何东西。
程序里面加了一个新的参数 action
,并把它取值为 store_true
。也就是说如果这个选项 --verbose
被修改了,那么我们就给它赋值为 True
,如果没有被修改,那么就是 False
。当你修改这个值的时候,实际上,不管你指定的是什么,它都会被赋值为 True
。
4.parse_known_args()就很有用。它很像parse_args().
我们先讲一下调用parse_args()方法进行解析;解析成功之后即可使用。
比如:
def parse_args():
parser = argparse.ArgumentParser()
help = The addresses to connect. parser.add_argument('addresses',nargs = '*',help = help)
help = The filename to operate on.Default is poetry/ecstasy.txt parser.add_argument('filename',help=help)
args = parser.parse_args();
return args
if __name__ == '__main__':
print 'The port is : %d.' % args.port
======================================但是
print(FLAGS)
print(unparsed)
命令窗口输入:$ python prog.py --flag_int 0.02 --double 0.03 a 1运行结果如下:
====================下面给个完整一点的代码作为参考
import argparse
import os
FLAGS=None
def main():
if tf.gfile.Exists(FLAGS.log_dir):
tf.gfile.Delete_Recursively(FLAGS.log_dir)
tf.gfile.MakeDirs(FLAGS.log_dir)
if __name__=='__main__':
parser=argparse.ArgumentParser()
parser.add_argument('--log_dir',type=str,default=os.path.join(os.getenv('TEST_TMPDIR', '/tmp'),'tensorflow/mnist/logs/fully_connected_feed'),help='Directory to put the log data.')
parser.add_argument('--fake_data',default=False,help='If true, uses fake data for unit testing.',action='store_true')
FLAGS,unparsed=parser.parse_know_args()
tf.app.run(main=main,argv=[sys.argv[0]]+unparsed)
argc 是 argument count的缩写,表示传入main函数的参数个数;
argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个;我们有时候这样写:
用arg=parse.parse_args(sys.argv[1:]),sys.argv[1:]来获取真正的第一个参数值.
总结:
使用步骤:
1:import argparse
2:parser = argparse.ArgumentParser()
3:parser.add_argument()
4:parser.parse_args() or FLAGS,unparsed=parser.parse_know_args()
参考:
https://www.jianshu.com/p/e8010e85aeb3
https://blog.csdn.net/mameng1/article/details/54409910
https://www.cnblogs.com/xlqtlhx/p/8243592.html
https://www.2cto.com/kf/201412/363654.html
https://blog.csdn.net/dcrmg/article/details/51987413
https://www.cnblogs.com/zknublx/p/6106343.html
https://www.cnblogs.com/lovemyspring/p/3214598.html