Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带函数的argparse子parser_Python_Argparse - Fatal编程技术网

Python 带函数的argparse子parser

Python 带函数的argparse子parser,python,argparse,Python,Argparse,您好,我从argparse开始。我的目标是使用主命令构建CLI,主命令接受参数并重定向到相应的命令函数。以下是我迄今为止所做的: def main(): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() command1_parser = subparsers.add_parser('command1') command1_parser.set_defaults(fu

您好,我从
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
或:


它无法捕获相应的
参数
。我做错了什么?谢谢

因为您需要通过
args.func(args)
手动调用函数:


查看文档中完整的
子parser
set\u defaults
示例。如果程序在没有任何参数的情况下运行,则会抛出错误
AttributeError:“Namespace”对象在
args.func(args)
行没有属性“func”。@FilipS。正确的。这只是使OP的代码正常工作的最小更改。使用此代码的人应添加相关的卫生检查。
entrypoint command2 --frequency 10
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()