我是靠谱客的博主 敏感唇彩,最近开发中收集的这篇文章主要介绍Python-解析命令行参数的两中方式创建argparse解析器实例参数说明parser.add_argument(‘list’,metavar=‘N’,nargs=’+’,help=‘get int list’) (不带’-'写法)add_argument有两个可变长参数:args, kwargs, 表示接收的参数作为元组来处理, 接收的参数作为字典来处理*args = (’-l’,’–list’) **kwargs = {‘dest’:‘list’,‘metavar’:‘N’,‘nargs’,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第一种:getopt

# 第一种方式获取输入参数 - getopt

# opts为分析出的格式信息,是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。
# args为不属于格式信息的剩余的命令行参数。
# eg:python parameter.py -l 1 -c 2 --list 3 5 6
# opts=[(-l,1),(-c,2),(--list 3)]  args=[5,6]

# getopt只能处理简单的参数,getopt通过遍历sys.argv里的所有参数,如果'-'开始者认为是短参数
# 类型,截取掉'-'后作为cmd(命令),在取第二个参数为命令的value,'--'同理,然后把cmd,value以
# 一个元组存储,放到opts列表里,不带'-','--'者当着不带格式的参数,然后放到args列表里,使用getopt并不能指定参数的类型。
if 0:

    try:
        #第一个参数是程序本身 即 parameter.py
        print(sys.argv[0])
        #解析参数
        opts,args = getopt.getopt(sys.argv[1:],'l:t:',["list=","target="])
        print(opts)
        print(args)
    except getopt.GetoptError:
        pass

第二种 : argparse

python官方文档

  • argparse一种方便用户构建命令行参数的接口,知道怎么解析sys.argv参数,也能够自动生成help帮助文档,
    使用说明,错误提示等

  • 使用简单步骤:

    创建argparse解析器实例

    parser = argparse.ArgumentParser(
    prog=‘my parameter’,
    usage=’-- test usage’,
    description = textwrap.dedent(’’’
    Please do not mess up this text!
    --------------------------------
    I have indented it
    exactly the way
    I want it
    ‘’’),
    epilog=’’‘likewise for this epilog whose whitespace will
    be cleaned up and whose words will be wrapped
    across a couple lines’’’,
    # ‘-+’,就可以用’-’,’–’,’+’,’++‘来添加参数了
    prefix_chars=’-+’,
    # 有时,例如在处理特别长的参数列表时,将参数列表保存在文件中而不是在命令行输入它可能是有意义的。
    # 如果将fromfile_prefix_chars =参数赋予ArgumentParser构造函数,则以任何指定字符开头的参数将被视为文件,并将被它们包含的参数替换。:
    fromfile_prefix_chars=’@’,
    formatter_class=argparse.RawDescriptionHelpFormatter,
    argument_default=argparse.SUPPRESS,
    # 是否允许长参数
    allow_abbrev=True,
    #是否添加help参数
    add_help= True
    )

    参数说明

     #  prog - 程序的名称 (default: sys.argv[0],即parameter.py,当然自己可以修改)
     #  usage - 使用说明 (default: generated from arguments added to parser)
     #  description - 显示在参数帮助说明前面的描述 (default: none)
     #  epilog - 显示在参数帮助说明后面的描述 (default: none)
     #  parents - A由ArgumentParser对象组成的列表,它们的arguments选项会被包含到新ArgumentParser对象中。(类似于继承)
     #  formatter_class - help信息输出的格式
     #  prefix_chars - 参数前缀, (default: ‘-‘),通过prefix_chars来设置其它前缀,eg:'-+',就可以用'-','--','+','++'来添加参数了
     #  fromfile_prefix_chars - The set of characters that prefix files from which additional arguments should be read (default: None)
     #  argument_default - The global default value for arguments (default: None)
     #  conflict_handler - The strategy for resolving conflicting optionals (usually unnecessary)
     #  add_help - 添加'-h','--help'到参数中 (default: True)
     #  allow_abbrev - Allows long options to be abbreviated if the abbreviation is unambiguous. (default: True)
    
  • 添加参数 - 从命令行获取一个整数列表

    parser.add_argument(’-l’,’–list’,dest=‘list’,metavar=‘N’,nargs=’+’,help=‘get int list’)

    parser.add_argument(‘list’,metavar=‘N’,nargs=’+’,help=‘get int list’) (不带’-'写法)

    add_argument有两个可变长参数:args, kwargs, 表示接收的参数作为元组来处理, 接收的参数作为字典来处理

    *args = (’-l’,’–list’) **kwargs = {‘dest’:‘list’,‘metavar’:‘N’,‘nargs’:’+’,‘help’:‘get int list’}

    参数说明

     # name or flags - 一个名字或者是一个列表,表示了选择参数, e.g. foo or -f, --foo.(parser.add_argument('-f', '--foo'))
     # action - 读取的参数中出现指定参数的时候的行为(默认值是 store。)
    
         # store_const,表示赋值为const;
         # append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
         # append_const,将参数规范中定义的一个值保存到一个列表;
         # count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
    
     # nargs - 应该从命令后读取的参数的数量
         # 类似正则表达式
         # OPTIONAL = '?'
         # ZERO_OR_MORE = '*' 
         # ONE_OR_MORE = '+' 只是读取一个参数
         # PARSER = 'A...'
         # REMAINDER = '...'
         # _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'
     # const - 保存一个常量
     # default - 不指定参数时的默认值。
     # type - 命令行参数应该被转换成的类型。
     # choices - 参数可允许的值的一个容器。
     # required - 可选参数是否可以省略 (仅针对可选参数)。
     # help - 帮助说明
     # metavar - 帮助信息中显示的参数名称
     # dest - 参数的key,用来获取具体的参数值.
    
  • 解析参数

    -----fromfile_prefix_chars

    with open(‘args.txt’, ‘w’) as fp:

    fp.write(’-fnbar’)

    parser = argparse.ArgumentParser(fromfile_prefix_chars=’@’)

    parser.add_argument(’-f’)

    parser.parse_args([’-f’, ‘foo’,’@args.txt’])

    argf = parser.parse_args()

    print(argf)

    -----parents

    parent_parser = argparse.ArgumentParser(add_help=False)

    parent_parser.add_argument(’–parent’, type=int)

    foo_parser = argparse.ArgumentParser(parents=[parent_parser])

    foo_parser.add_argument(‘foo’)

    foo_parser.parse_args([’–parent’, ‘2’, ‘XXX’])

    args = parser.parse_args()
    print(args)
    print(args.list)

    执行命令:python3 parameter.py -l 1 2 3 4

    输出:

    Namespace(list=[‘1’, ‘2’, ‘3’, ‘4’])

    [‘1’, ‘2’, ‘3’, ‘4’]

    执行命令:python3 parameter.py -h

    输出:

    usage: parameter.py [-h] [-l N [N …]]

    two num add

    optional arguments:

    -h, --help show this help message and exit

    -l N [N …] get int list

源码

拓展知识:fire库用法

  • 在命令行通过命令的方式调用python组建和方法等
 import fire
class Calculator(object):
  """A simple calculator class."""

  def double(self, number):
    return 2 * number

if __name__ == '__main__':
  fire.Fire(Calculator)
  • 执行命令:python3 fire_study.py double 10
  • 输出:20

最后

以上就是敏感唇彩为你收集整理的Python-解析命令行参数的两中方式创建argparse解析器实例参数说明parser.add_argument(‘list’,metavar=‘N’,nargs=’+’,help=‘get int list’) (不带’-'写法)add_argument有两个可变长参数:args, kwargs, 表示接收的参数作为元组来处理, 接收的参数作为字典来处理*args = (’-l’,’–list’) **kwargs = {‘dest’:‘list’,‘metavar’:‘N’,‘nargs’的全部内容,希望文章能够帮你解决Python-解析命令行参数的两中方式创建argparse解析器实例参数说明parser.add_argument(‘list’,metavar=‘N’,nargs=’+’,help=‘get int list’) (不带’-'写法)add_argument有两个可变长参数:args, kwargs, 表示接收的参数作为元组来处理, 接收的参数作为字典来处理*args = (’-l’,’–list’) **kwargs = {‘dest’:‘list’,‘metavar’:‘N’,‘nargs’所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部