我将制作一个具有插件功能的命令行应用程序,每个新插件都将由 __main__.py
脚本中的子命令调用。
我曾经使用argparse
,我想知道是否可以使用argparse
来实现子命令+插件(我找到了一些工具,但使用了已弃用的包)?
myfantasticCLI
├── __main__.py
└── plugins
├── create.py
├── notify.py
└── test.py
我知道我可以使用argparse
作为子命令,但不知道如何以动态加载的方式使用它。 :/
最佳答案
如果您使用以下命令初始化 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
来测试问题的导入给定名称
部分。
关于python - 插件模式+子命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986250/