我将使用插件功能执行命令行应用程序,每个新插件将由__main__.py
脚本的子命令调用。
我曾经使用过argparse。我想知道是否有可能使用argparse实现sud命令+插件看起来像(我发现了一些工具但是使用了已弃用的软件包)?
myfantasticCLI
├── __main__.py
└── plugins
├── create.py
├── notify.py
└── test.py
我知道我可以使用argparse作为子命令,但不知道如何使用动态加载方式。 :/
答案 0 :(得分:1)
如果使用
初始化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
部分。