zoukankan      html  css  js  c++  java
  • Python argparse 子命令

    前面

    功能比较多的命令端程序常常将功能分解到不同子命令中,如在Python中常见的pip installpip uninstall等。当程序比较复杂且不同功能都需要不同参数时,子命令是一个不错的方式。

    正文

    argparse 使用add_subparsers()方法去创建子命令。代码:

    import argparse
    
    parser = argparse.ArgumentParser(prog='PROG')
    
    subparsers = parser.add_subparsers(help='sub-command help')
    #添加子命令 add
    parser_a = subparsers.add_parser('add', help='add help')
    parser_a.add_argument('-x', type=int, help='x value')
    parser_a.add_argument('-y', type=int, help='y value')
    #添加子命令 sub
    parser_s = subparsers.add_parser('sub', help='sub help')
    parser_s.add_argument('-x', type=int, help='x value')
    parser_s.add_argument('-y', type=int, help='y value')
    
    args = parser.parse_args()
    
    print('x', args.x, 'y', yargs.y)
    

    终端运行程序

    $python subc.py add -x 1 -y 2
    x 1 y 2
    $python subc.py sub -x 1 -y 2
    x 1 y 2
    

    但是是没办法判断你使用的是哪个子命令的。所幸的是argparse提供了一个一个方法set_defaults(),可以将子命令绑定特定的函数。

    import argparse
    
    def add(args):
         r = args.x + args
         print('x + y = ', r)
    
    def sub(args):
         r = args.x - args
         print('x - y = ', r)
    
    parser = argparse.ArgumentParser(prog='PROG')
    subparsers = parser.add_subparsers(help='sub-command help')
    #添加子命令 add
    parser_a = subparsers.add_parser('add', help='add help')
    parser_a.add_argument('-x', type=int, help='x value')
    parser_a.add_argument('-y', type=int, help='y value')
    #设置默认函数
    parser_a.set_defaults(func=add)
    #添加子命令 sub
    parser_s = subparsers.add_parser('sub', help='sub help')
    parser_s.add_argument('-x', type=int, help='x value')
    parser_s.add_argument('-y', type=int, help='y value')
    #设置默认函数
    parser_s.set_defaults(func=sub)
    args = parser.parse_args()
    #执行函数功能
    args.func(args)
    

    终端运行程序

    $python subc.py add -x 1 -y 2
    x + y =  3
    $python subc.py sub -x 1 -y 2
    x - y =  -1
    

    argparse会将子命令会运行相应的函数执行子命令绑定函数功能

    其它

    但是如果你尝试运行多个子命令是会报错。默认不支持平行运行多个子命令的。不过可以给子命令在添加子命令。关于运行多个子命令的解决办法感兴趣的可以去stackoverflow查看这个问题下的答案:
    How to parse multiple nested sub-commands using python argparse?

    参考:

    https://docs.python.org/3/library/argparse.html#sub-commands

    原文链接:
    Python argparse 子命令
    https://www.jianshu.com/p/27ce67dab97e

  • 相关阅读:
    卡特兰数
    hdu 1023 Train Problem II
    hdu 1022 Train Problem
    hdu 1021 Fibonacci Again 找规律
    java大数模板
    gcd
    object dection资源
    Rich feature hierarchies for accurate object detection and semantic segmentation(RCNN)
    softmax sigmoid
    凸优化
  • 原文地址:https://www.cnblogs.com/huanping/p/10925768.html
Copyright © 2011-2022 走看看