具有函数的argparse subparsers

时间:2018-02-28 21:10:43

标签: python argparse

您好我从argparse开始。我的目标是使用主命令构建一个CLI,该命令接受参数并重定向到相应的命令函数。这是我到目前为止所做的:

def main():

    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()

    command1_parser = subparsers.add_parser('command1')
    command1_parser.set_defaults(func=command1)
    command1_parser.add_argument('--name', dest='name')

    command2_parser = subparsers.add_parser('command2')
    command2_parser.set_defaults(func=command2)
    command2_parser.add_argument('--frequency', dest='frequency')

    args = parser.parse_args()

def command1():

    # do something with args.name

def command2():

    # do something with args.frequency

if __name__ == '__main__':
    main()

当我这样做时:

entrypoint command1 --name Hello

或者:

entrypoint command2 --frequency 10

无法捕获相应的args。我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:4)

因为您需要args.func(args)手动调用该功能:

import argparse

def main():
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()

    command1_parser = subparsers.add_parser('command1')
    command1_parser.set_defaults(func=command1)
    command1_parser.add_argument('--name', dest='name')

    command2_parser = subparsers.add_parser('command2')
    command2_parser.set_defaults(func=command2)
    command2_parser.add_argument('--frequency', dest='frequency')

    args = parser.parse_args()
    args.func(args)

def command1(args):
    print("command1: %s" % args.name)

def command2(args):
    print("comamnd2: %s" % args.frequency)

if __name__ == '__main__':
    main()