plugins pattern + sub command

时光总嘲笑我的痴心妄想 提交于 2020-01-22 01:57:29

问题


I will do a command line application with plugin capability, each new plugin will be invoked by a sub command from a __main__.py script.

I used to use argparse, I wonder if it's possible with argparse to implement sub command + plugin looking like (I found some tool but using deprecated packages) ?

myfantasticCLI
├── __main__.py
└── plugins
    ├── create.py
    ├── notify.py
    └── test.py

I know that I could use argparse for sub command, but don't know how to use it in a dynamic loading way. :/


回答1:


If you initialize the argparse subparsers with

sp = parser.add_subparsers(dest='cmd',...)

then after parsing args.cmd will be the name of the chosen subparser or command.

Then a simple if tree could import and run the desired modules

cmd = args.cmd
if cmd in ['module1',...]:
   import plugins.module1 as mod:
   mod.run(...)
elif cmd in ['module2',....]:
   import plugins.module2 as mod:
   ...

There are fancier ways of doing this, but I prefer starting with the obvious.

Also my focus is on getting the cmd name from the parser, not on the details of importing a module given the name. You don't need argparse to test the import given a name part of the problem.



来源:https://stackoverflow.com/questions/36986250/plugins-pattern-sub-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!