Python脚本命令行解析

argparse 模块
使用 argparse 模块可以方便的编写出友好的命令行接口。程序定义需要的参数,然后 argparse 将从sys.argv解析出那些参数。argparse 模块还可以自动生成帮助手册和使用手册。并在用户给程序传入无效参数时报出错误信息。

1. 一个简单的示例

prog.py 文件:

import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')args = parser.parse_args()
print(args.accumulate(args.integers))

脚本执行:

  • 在命令行中执行该文件,返回帮助信息:
zzz@ubuntu:~/my_learning$ python3 prog.py -h
usage: prog.py [-h] [--sum] N [N ...]Process some integers.positional arguments:N           an integer for the accumulatoroptional arguments:-h, --help  show this help message and exit--sum       sum the integers (default: find the max)
zzz@ubuntu:~/my_learning$
  • 使用适当参数运行,脚本会返回输入命令行传入整数的总和或最大值
zzz@ubuntu:~/my_learning$ python3 prog.py 1 3 2 6
6
zzz@ubuntu:~/my_learning$ python3 prog.py 1 3 2 6 --sum
12
zzz@ubuntu:~/my_learning$

脚本简析:

  1. 使用 argparse创建一个 ArgumentParse 对象。该对象将包含命令行解析成Python数据类型所需的全部信息。
>>> parser = argparse.ArgumentParser(description='Process some integers.')
  1. ArgumentParse 对象添加程序参数信息,通过调用 add_argument()方法完成。指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。
>>> parser.add_argument('integers', metavar='N', type=int, nargs='+',
...                     help='an integer for the accumulator')
>>> parser.add_argument('--sum', dest='accumulate', action='store_const',
...                     const=sum, default=max,
...                     help='sum the integers (default: find the max)')
  1. 这些信息在parse_args()调用时被存储和使用。 ArgumentParse 对象通过调用 parse_args() 方法解析参数。该方法将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。
args = parser.parse_args()
print(args.accumulate(args.integers))

parse_args()返回一个具有两个属性(‘integers’ 和 ‘accumulate’)的对象。integers属性将是一个包含一个或多个整数的列表,而 accumulate 属性当命令行中指定了 --sum 参数时将是 sum() 函数,否则则是 max() 函数。

2. ArgumentParser 对象

class argparse.ArgumentParser(prog=None,    # 程序名,默认为脚本文件名。usage=None, # 根据它包含的参数来构建用法消息。description=None, # 简约描述程序的功能。epilog=None,parents=[],formatter_class=argparse.HelpFormatter,prefix_chars='-', romfile_prefix_chars=None,argument_default=None,conflict_handler='error', add_help=True, allow_abbrev=True,exit_on_error=True)

3. ArgumentParser.add_argument() 方法

ArgumentParser.add_argument(name or flags[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

参数结束

  • name or flags,选项或位置参数

    • 选项创建
    • 位置参数创建:以 - 前缀识别,其它识别为位置参数
>>>parser.add_argument('-f', '--foo')
>>>parser.add_argument('bar')
  • action,指定对应的命令行参数应当如何处理,可选项有:

    • store-存储参数的值。默认动作。

      >>> parser.add_argument('--foo')
      
    • store_const-存储被const命名参数指定的值。通常用在选项中来指定一些标志。
      >>> parser.add_argument('--foo', action='store_true')
      >>> parser.add_argument('--bar', action='store_false')
      >>> parser.add_argument('--baz', action='store_false')
      
    • store_true and store_false-store-const的用于存储True和False的特殊用例,默认值为True和False。
    • append-存储一个列表,并且将每个参数追加到列表中。
      >>> parser.add_argument('--foo', action='append')
      >>> parser.parse_args('--foo 1 --foo 2'.split())
      >>> Namespace(foo=['1', '2'])
      
    • append_const-存储一个列表,并将const命名参数指定的值追加到列表中。
    • count-计算一个关键字参数出现的数目或次数。
      >>> parser.add_argument('--verbose', '-v', action='count', default=0)
      
    • help-打印所有当前解析器中的选项和参数都的完整帮助信息。
    • version-期望有一个version命令参数在调用中,并打印版本信息。
    • extend-这会存储一个列表,并将每个参数值加入到列表中
      >>> parser.add_argument('--foo', action=argparse.BooleanOptionalAction)
      >>> parser.parse_args(['--no-foo'])
      Namespace(foo=False)
      
  • nargs,关联不同数目的命令行参数到单一动作。可选项有:
    • N(一个整数)。将命令行中的N个参数集到一个列表中。

      >>> parser = argparse.ArgumentParser()
      >>> parser.add_argument('--foo', nargs=2)
      >>> parser.add_argument('bar', nargs=1)
      >>> parser.parse_args('c --foo a b'.split())
      Namespace(bar=['c'], foo=['a', 'b'])
      
    • ‘?’。如果可能的话,会从命令行中消耗一个参数,并产生一个单一项。如果当前没有命令行参数,则会产生 default 值。注意,对于选项,有另外的用例 - 选项字符串出现但没有跟随命令行参数,则会产生 const 值。
      >>> parser = argparse.ArgumentParser()
      >>> parser.add_argument('--foo', nargs='?', const='c', default='d')
      >>> parser.add_argument('bar', nargs='?', default='d')
      >>> parser.parse_args(['XX', '--foo', 'YY'])
      Namespace(bar='XX', foo='YY')
      >>> parser.parse_args(['XX', '--foo'])
      Namespace(bar='XX', foo='c')
      >>> parser.parse_args([])
      Namespace(bar='d', foo='d')
      
    • ‘*’。将当前命令行参数集到一个列表中。和’+'类似。
      >>> parser = argparse.ArgumentParser()
      >>> parser.add_argument('--foo', nargs='*')
      >>> parser.add_argument('--bar', nargs='*')
      >>> parser.add_argument('baz', nargs='*')
      >>> parser.parse_args('a b --foo x y --bar 1 2'.split())
      Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])
      
  • const,用于保存不从命令行中读取但被需求的常数值。常见的两种用途:
    • add_argument()使用 action='store_const'action='append_const 调用时。这些动作将 const 值添加到 parse_args() 返回的对象的属性中。
    • add_argument() 通过选项(例如 -f 或 --foo)调用并且 nargs='?' 时。这会创建一个可以跟随零个或一个命令行参数的选项。当解析命令行时,如果选项后没有参数,则将用 const 代替。
  • default,当选项或位置参数被忽略时,可以指定在命令行参数未出现时应当使用的值。
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--foo', default=42)
    >>> parser.parse_args(['--foo', '2'])
    Namespace(foo='2')
    >>> parser.parse_args([])
    Namespace(foo=42)
    
  • type,命令行参数默认当作字符串读入,type可以使用普通内置类型和函数或者自定义的函数作为类型转化器。
    parser = argparse.ArgumentParser()
    parser.add_argument('count', type=int)
    parser.add_argument('distance', type=float)
    parser.add_argument('street', type=ascii)
    parser.add_argument('code_point', type=ord)
    parser.add_argument('source_file', type=open)
    parser.add_argument('dest_file', type=argparse.FileType('w', encoding='latin-1'))
    parser.add_argument('datapath', type=pathlib.Path)
    
  • choices,某些参数应从一组限定值中选择,此时可以使用choices参数。
    >>> parser = argparse.ArgumentParser(prog='game.py')
    >>> parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
    >>> parser.parse_args(['rock'])
    Namespace(move='rock')
    
  • required,'-'标记的选项参数一般可以被忽略,如果需要将其标志位必须,则可以使用该关键字为True来说明。
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--foo', required=True)
    >>> parser.parse_args(['--foo', 'BAR'])
    Namespace(foo='BAR')
    
  • metavar
  • dest

4. ArgumentParser.parse_args() 方法

将参数字符串转换为对象并将其设为命名空间的属性。 add_argument() 添加了对象及其赋值。

ArgumentParser.parse_args(args=None,    # 要解析的字符串列表。默认值从 sys.argv获取。namespace=None # 要获取属性的对象。默认值是一个新的空Namespace对象。)

【Python】Python脚本命令行解析相关推荐

  1. python:argparse命令行解析模块详解

    argparse命令行解析模块学习 import argparse parser = argparse.ArgumentParser() #类似于初始化吧 parser.parse_args() #解 ...

  2. python 命令行解析模块_【Python模块】命令行解析--argparse

    python命令行解析 前言 当你还在使用 if len(sys.argv) > 1: 这样的方式判断选项和参数的时候,是否已意识到已经落伍了. 我在bash中用过getopt getopts, ...

  3. python运行脚本命令行选项

    2019独角兽企业重金招聘Python工程师标准>>> 1.-d 提供调试输出 2.-o生成优化字节码(pyo文件) 3.-s 不导入site模块以启动时查找Python路径 4.- ...

  4. python解析库_Python命令行解析库argparse

    原博文 2014-08-13 05:48 − 2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试 ...

  5. Py之argparse:Python库之argparse(命令行解析)简介、安装、使用方法之详细攻略

    Py之argparse:Python库之argparse(命令行解析)简介.安装.使用方法之详细攻略 导读 python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用a ...

  6. python 命令行解析函数_python命令行解析之parse_known_args()函数和parse_args()使用区别介绍...

    在python中,命令行解析的很好用, 首先导入命令行解析模块 import argparse import sys 然后创建对象 parse=argparse.ArgumentParser() 然后 ...

  7. python之命令行解析工具argparse

    以前写python的时候都会自己在文件开头写一个usgae函数,用来加上各种注释,给用这个脚本的人提供帮助文档. 今天才知道原来python已经有一个自带的命令行解析工具argparse,用了一下,效 ...

  8. Python命令行解析:sys.argv[]函数的简介、案例应用之详细攻略

    Python命令行解析:sys.argv[]函数的简介.案例应用之详细攻略 目录 sys.argv[]函数的简介 sys.argv[]函数的案例应用 1.基础测试 2.进阶用法 3.sys.argv[ ...

  9. Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果

    Python命令行解析:IDE内点击Run运行代码直接得出结果.基于TF flags(或argparse.sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果 目录 命令行解析 T1.采 ...

最新文章

  1. zset中的score_每天五分钟,成就redis大神之Zset数据类型
  2. CSP认证201503-2 数字排序[C++题解]:哈希表、排序、结构体
  3. 【hihocoder - offer编程练习赛60 C】路径包含问题(LCA,树上倍增)
  4. ios 避免两个button同一时候被点击
  5. windows命令 笔记
  6. 服务器tcpip修复工具,tcpip协议修复工具winsockfix
  7. 图解设计模式 - Adapter 模式
  8. Delphi 11.0 Alexandria 来了
  9. LintCode 51: Previous Permutation
  10. akshare复权算法-港股复权后数据代码分享
  11. ArcGIS亚洲字体(CJK)垂直显示
  12. 计算机模拟病例考试试题,计算机模拟病例考试的效标—关联效度研究
  13. hdu2073 无限的路 瞎搞
  14. PHP-用ThinkPHP和Bootstrap实现用户登录设计
  15. Visual C++游戏编程基础之多背景循环动画
  16. 川土微电子 | 数字隔离器选型注意事项
  17. 中国象棋棋盘java_Java中国象棋博弈程序探秘[2]——棋盘的表示
  18. 7、魔兽世界一种私服搭建服务器mangosZero答疑
  19. python 如何把字符串转换成浮点数
  20. 常用系统变量 SY-*

热门文章

  1. BGA焊接开裂失效分析案例
  2. 网规:第4章 网络安全-4.8企业网络安全隔离
  3. 卡迪夫大学计算机和信息技术管理研究方向,卡迪夫大学研究生GPA要求
  4. 2020行业信息化竞争力百强发布!
  5. Python实战系列-上海银行间同业拆借利率最新报错解决方案
  6. 带头结点的单链表删除操作 (10 分)
  7. 那些为用户保驾护航的产品
  8. 郁闷啊,三点多钟还没睡,休息一下,看下摸胸小苹果。
  9. 2017国家集训队作业[agc016e]Poor Turkey
  10. 2022-6-5 供暖器,最小差,两地调度,峰与谷