我将做一个具有插件功能的命令行应用程序,每个新的插件都将被来自__main__.py脚本的子命令调用。
我曾经使用过argparse,我想知道是否有可能用argparse实现像这样的子命令+插件(我发现了一些工具,但使用的是不推荐使用的包)?
myfantasticCLI
├── __main__.py
└── plugins
├── create.py
├── notify.py
└── test.py我知道我可以对子命令使用argparse,但不知道如何以动态加载的方式使用它。:/
发布于 2016-05-03 00:34:31
如果使用初始化argparse子解析器
sp = parser.add_subparsers(dest='cmd',...)然后,在解析之后,args.cmd将是所选子解析器或命令的名称。
然后,一个简单的if树就可以导入并运行所需的模块
cmd = args.cmd
if cmd in ['module1',...]:
import plugins.module1 as mod:
mod.run(...)
elif cmd in ['module2',....]:
import plugins.module2 as mod:
...有一些更花哨的方法可以做到这一点,但我更喜欢从显而易见的开始。
另外,我的重点是从解析器获取cmd名称,而不是导入给定名称的模块的细节。您不需要使用argparse来测试问题的import given a name部分。
https://stackoverflow.com/questions/36986250
复制相似问题