argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数. 如果你想详细的了解它的功能.建议阅读这个,或者这个 本篇文章只对其基本功能进行介绍,并对TensorFlow的examples中argarse使用进行详细的介绍
使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。
解析器类是 ArgumentParser 。构造方法接收几个参数来设置用于程序帮助文本的描述信息以及其他全局的行为或设置。
import argparse parser = argparse.ArgumentParser() """ def __init__(self, prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True): """"这个方法是用来添加参数的方法,下面是一个示例
parser.add_argument( '--hidden2', type=int, default=32, help='Number of units in hidden layer 2.' )其中help是默认参数,你可以在构造parser 时选择其是否存在,在实际使用中 可以使用 -h 或者 –help调用该参数 第一个参数是字符串,也就是这个参数的名字,之后的参数(除help)都是以**kwargs传入的
def add_argument(self, *args, **kwargs): """ add_argument(dest, ..., name=value, ...) add_argument(option_string, option_string, ..., name=value, ...) """ # if no positional args are supplied or only one is supplied and # it doesn't look like an option string, parse a positional # argument # 如果只传入一个参数,那么默认只解析该参数(即使它不是字符串)之后**kwargs 还有其他参数会被解析,其中type为参数数据类型,default为参数默认值,其他参数请参考argparse的源码
TensorFlow中的实例
FLAGS, unparsed = parser.parse_known_args() print(FLAGS, unparsed) print(sys.argv[0]) # 运行结果如下: # Namespace(batch_size=100, hidden1=128, hidden2=32, learning_rate=0.01, num_epochs=2, train_dir='/tmp/data') # []部分源码如下
if args is None: # args default to the system args args = _sys.argv[1:] else: # make sure that args are mutable args = list(args) # default Namespace built from parser defaults if namespace is None: namespace = Namespace() ... #parse the arguments and exit if there are any errors try: namespace, args = self._parse_known_args(args, namespace) if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) return namespace, args except ArgumentError: err = _sys.exc_info()[1] self.error(str(err))之所以返回的unparsed = [] 就是因为 args 实际 “不存在”
