Skip to main content
 首页 » 编程设计

python之具有函数的 argparse 子解析器

2025年05月04日21Renyi-Fan

你好,我从 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。我做错了什么?谢谢!

请您参考如下方法:

因为需要通过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()