具有功能的argparse子解析器

eru*_*rup 1 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()
Run Code Online (Sandbox Code Playgroud)

当我做:

entrypoint command1 --name Hello
Run Code Online (Sandbox Code Playgroud)

要么:

entrypoint command2 --frequency 10
Run Code Online (Sandbox Code Playgroud)

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

adr*_*tam 5

因为您需要通过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()
Run Code Online (Sandbox Code Playgroud)

  • 如果程序在没有任何参数的情况下运行,这会在“args.func(args)”行抛出错误“AttributeError: 'Namespace' object has no attribute 'func'”。 (2认同)