Python中的argparse模块

原创 2017年08月05日 20:44:25

简介

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() 添加参数

这个方法是用来添加参数的方法,下面是一个示例

    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的源码

parser.parse_known_args() 获取已知参数

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 实际 “不存在”

TensorFlow中argparse部分的运行

if __name__ == '__main__':
# 构建parser 
    parser = argparse.ArgumentParser()
    # 设置参数
    parser.add_argument(
        '--learning_rate',
        type=float,
        default=0.01,
        help='Initial learning rate.'
    )
    parser.add_argument(
        '--num_epochs',
        type=int,
        default=2,
        help='Number of epochs to run trainer.'
    )
    parser.add_argument(
        '--hidden1',
        type=int,
        default=128,
        help='Number of units in hidden layer 1.'
    )
    parser.add_argument(
        '--hidden2',
        type=int,
        default=32,
        help='Number of units in hidden layer 2.'
    )
    parser.add_argument(
        '--batch_size',
        type=int,
        default=100,
        help='Batch size.'
    )
    parser.add_argument(
        '--train_dir',
        type=str,
        default='/tmp/data',
        help='Directory with the training data.'
    )
    # 获取设置参数值,此时先前设置的FLAGS已经变成了 Namespace(batch_size=100, hidden1=128, hidden2=32, learning_rate=0.01, num_epochs=2, train_dir='/tmp/data')

    FLAGS, unparsed = parser.parse_known_args()
    # 运行 main 
    # argv=[sys.argv[0]] 为文件名
    # unparsed 为其他参数,但是实际上源码examples中不存在该部分
    tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
版权声明:欢迎转载,共同学习,但请尊重版权,标明出处:http://blog.csdn.net/fontthrone

python Argparse模块的使用

参考: Argparse Tutorial:https://docs.python.org/2.7/howto/argparse.html#id1 argparse - Parser for comm...
  • u012005313
  • u012005313
  • 2015年11月30日 21:11
  • 6974

python Argparse 模块入门

argparse是python标准库里面的用来处理命令行参数的库位置参数和选项参数先了解位置参数和选项参数的概念,以linux中’ls’命令为例[root@openstack_1 /]# ls bin...
  • tuxl_c_s_d_n
  • tuxl_c_s_d_n
  • 2015年04月06日 17:10
  • 1672

python命令行解析工具argparse模块

转自: http://www.cnblogs.com/fireflow/p/4841389.html python命令行解析工具argparse模块【1】   argpar...
  • g863402758
  • g863402758
  • 2017年06月16日 15:22
  • 484

python之argparse模块

argparse 模块使编写用户友好的命令行界面变得更容易.程序只需定义好它要求的参数,然后argparse将负责如何从sys.argv中解析出这些参数。argparse模块还会自动生成帮助和使用信息...
  • qq_14898613
  • qq_14898613
  • 2017年01月16日 21:08
  • 236

Python中argparse模块的使用

argparse是python用于解析命令行参数的标准模块,用法如下: import argparse def test(a, b): print int(a)+int(b) parser...
  • fengqingting2
  • fengqingting2
  • 2015年09月09日 09:43
  • 975

pthon学习之argparse模块解析

1.建立解析器: import argparse parser = argparse.ArgumentParser( description=’This is a PyMOTW sampl...
  • sinat_36897497
  • sinat_36897497
  • 2016年12月02日 01:41
  • 399

Python Argparse模块的使用例子,往python脚本传参数

直接可套用的代码样例,只需要根据实际需求增加add_argument,添加可选参数和必选参数: import argparse,sys if len(sys.argv) == 1: sys....
  • lujiandong1
  • lujiandong1
  • 2015年11月19日 17:02
  • 2572

python中argparse

在很多编程语言中,运行程序可以直接使用function(a,b,……)运行程序,但是在python中就无法实现,那么我们如何在命令行中传递参数呢?在python的中,有一个argparse包,能够实现...
  • ali197294332
  • ali197294332
  • 2016年04月18日 20:50
  • 4821

python中的argparse模块(参数解析)

FROM: https://docs.python.org/2/howto/argparse.html#id1 http://blog.itpub.net/26250550/viewspace-12...
  • xiaoxinyu316
  • xiaoxinyu316
  • 2015年06月23日 23:41
  • 2802

Python模块学习系列(8)----argparse模块

boost库很好的支持C++的命令行解析,能使我们的程序用起来更酷。最近一直想Python里也用上命令行,这样就不用再IDE里修改输入参数了。记得前面介绍过使用os模块也能解析命令行,但是那个比较简单...
  • Sunshine_in_Moon
  • Sunshine_in_Moon
  • 2016年05月06日 17:45
  • 1283
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python中的argparse模块
举报原因:
原因补充:

(最多只允许输入30个字)