argparse.ArgumentParser()示例

0、为什么使用argparse

个人理解:xshell编程是一个很麻烦的过程,尤其是在很多变量,且想不断更改数值的时候,所以python提供了argparse库,以方便更好地进行命令行编程。

  • argparse在我们进行命令行编程的时候提供很多规范(约束),来指定我们编程的语句。
  • 利用argparse来定义了一些选项(argument),并对这些选项来 定制化 地进行约束。且可以对这些选项添加注释,来使得调用选项的人知道这些选项的含义。

0.1、参考链接

argparse官方文档:各种细节用法都有解释,非常推荐

1、示例

下面是一段python语句,用这段语句来具体分析一下argparse的使用过程。

if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  subprsr = parser.add_subparsers(dest="cmd")
  
  loc_subprsr = subprsr.add_parser("loc")
  loc_subprsr.add_argument("-t", "--target", required=True, choices=["p4", "cp",
"ns"], type=str, help="Traget set of files")

......

  args = parser.parse_args()

(1)subprsr添加子解析器

  parser = argparse.ArgumentParser()
  subprsr = parser.add_subparsers(dest="cmd")

前面两句定义了子命令:subprsr。
subprsr的定义格式:(来源:官方文档)
ArgumentParser.add_subparsers([title][, description][, prog][, parser_class][, action][, option_strings][, dest][, required][, help][, metavar])

许多程序都会将其功能拆分为一系列子命令,例如,svn 程序可发起调用的子命令有 svn checkout, svn update 和 svn commit 等。 当一个程序执行需要多组不同种类命令行参数时这种拆分功能的方式是一个非常好的主意。 ArgumentParser 通过 add_subparsers() 方法支持创建这样的子命令。

上述代码首先创建parser(一个argparse对象,通过构造函数ArgumentParser()创建),接下来利用parser创建了一个子命令名称为cmd的子命令
(dest - 将被用于保存子命令名称的属性名;默认为 None 即不保存任何值)

(2)add_parser添加解析器

  loc_subprsr = subprsr.add_parser("loc")

接下来一句为“loc”命令创建解析器(parser)

add_subparsers() 方法通常不带参数地调用并返回一个特殊的动作对象。
该对象只有一个方法 add_parser(),它接受一个命令名称和任意多个 ArgumentParser 构造器参数,并返回一个可使用通常方式进行修改的 ArgumentParser 对象。

则 loc_subprsr = subprsr.add_parser(“loc”) 就返回了一个ArgumentParser 对象,并赋给了loc_subprsr,接下来loc_subprsr就可以像普通的ArgumentParser 对象一样,调用add_argument()

注意:
如果不需要,或者不想使用subprsr时,可以直接创建ArgumentParser 对象来调用add_argument(),例如:

  parser = argparse.ArgumentParser(description='Process some integers.')
  parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

(3)add_argument() 关联参数

下面是add_argument()函数中可以添加的参数解析

ArgumentParser.add_argument() 方法将单个参数规格说明关联到解析器(parser),定义单个的命令行参数应当如何解析。 它支持位置参数,接受各种值的选项,以及各种启用/禁用旗标,add_argument()参数格式:
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

在argparse的官方文档中,每个形参都在下面有它自己更多的描述:

  • name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
  • action - 当参数在命令行中出现时使用的动作基本类型。
  • nargs - 命令行参数应当消耗的数目。
  • const - 被一些 action 和 nargs 选择所需求的常数。
  • default - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。
  • type - 命令行参数应当被转换成的类型。
  • choices - 由允许作为参数的值组成的序列。
  • required - 此命令行选项是否可省略 (仅选项可用)。
  • help - 一个此选项作用的简单描述。
  • metavar - 在使用方法消息中使用的参数值示例。
  • dest - 被添加到 parse_args() 所返回对象上的属性名。

接下来,我们继续分析文章开头的代码段 第四句:

  loc_subprsr.add_argument("-t", "--target", required=True, choices=["p4", "cp",
"ns"], type=str, help="Traget set of files")

那么,我们可以知道在代码中,“-t"是简称,”–target"是全称,他们是argument(选项)的“name or flags”。在使用中,我们可以通过简称或者全称来调用这个选项。

简称和全称,这类似在XShell语言中,我们查看python版本可以使用:

python -v

或者

python --version

接下来,required=True定义该选项是必须的,不可省略。type规定了这个命令行参数应当被转换成str类型。choices=[“p4”, “cp”,“ns”]规定了该选项可以选择的三种字符串值。help中提供了选项的注释:“Traget set of files”。

(4)parse_args() 运行解析器

作为一段argparse语句的结尾,ArgumentParser.parse_args() 方法运行解析器并将提取的数据放入argparse.Namespace 对象。

在文章开头的代码段中,运行 parse_args() 如下:

args = parser.parse_args()

上文中所说的dest属性,就是与parse_args() 的返回对象有关,dest - 被添加到 parse_args() 所返回对象上的属性名

2、命令行运行

我们再次回看文章开头的这段代码:

if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  subprsr = parser.add_subparsers(dest="cmd")
  
  loc_subprsr = subprsr.add_parser("loc")
  loc_subprsr.add_argument("-t", "--target", required=True, choices=["p4", "cp",
"ns"], type=str, help="Traget set of files")

假设他写在hong.py文件中,那么我们想要在命令行调用,只需要输入:

python hong.py loc -t p4

其中“-t”也可以写成–target,“p4”也可以用其他两个选项:“cp"或者"ns”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值