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()