Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在yapsy模块中添加激活/停用功能_Python_Plugins - Fatal编程技术网

Python 如何在yapsy模块中添加激活/停用功能

Python 如何在yapsy模块中添加激活/停用功能,python,plugins,Python,Plugins,目标: 我想在基于yapsy模块的应用程序中添加激活/停用功能,以及正确的实现方式 说明 我有一个python应用程序,它从不同的API(如Jira、Slack等)获取用户。我使用yapsy模块将其作为一个可插拔的模块工作 目前我是如何实施的? 目前,我已经使用配置文件添加了激活/停用功能。在配置文件中,您可以看到一个名为status的选项。如果启用配置,则读取配置,而不是调用run()函数,否则不会 [plugin_1] user = tara host = SERVERNAME filepa

目标: 我想在基于yapsy模块的应用程序中添加激活/停用功能,以及正确的实现方式

说明 我有一个python应用程序,它从不同的API(如Jira、Slack等)获取用户。我使用yapsy模块将其作为一个可插拔的模块工作

目前我是如何实施的?

目前,我已经使用配置文件添加了激活/停用功能。在配置文件中,您可以看到一个名为status的选项。如果启用配置,则读取配置,而不是调用run()函数,否则不会

[plugin_1]
user = tara
host = SERVERNAME
filepath = /etc/passwd 
status = enable
插件就是这样运行的

  savesessionname(cons.MAIN_CONFIG_PATH, session_name)
  simplePluginManager = PluginManager()
  simplePluginManager.setPluginPlaces(["plugins/"])
  simplePluginManager.collectPlugins()
  for plugininfo in simplePluginManager.getAllPlugins():
      plugininfo.plugin_object.run()
在所有的插件中都有run(),它们接收调用并运行插件。插件从配置中检查插件是否处于活动状态

使用yapsy的激活/停用功能的方法是什么 插件本身,而不是我实现阅读 配置并决定是否运行该函数

一些描述: simplePluginManager.collectPlugins()用于收集我们拥有的所有插件。是否有任何方法可以收集仅激活的插件。我已经阅读了yapsy文档,但找不到正确的方法,或者文档中的内容不清楚


通过很少的研究,我发现ConfigurablePluginManager可以用于此目的,但找不到好的例子。至少有一个例子对我来说是很好的开始

tldr:
getAllPlugins
方法返回
PlugInfo
对象,该对象具有
\PluInfo\u details
属性,即
configparser.configparser
对象()。yapsy信息文件中的所有信息都可以在那里访问

首先是文件夹结构

script.py
plugins
|- plugin1.yapsy-plugin
|- plugin1.py
插件信息文件:

[Core]
Name = Plugin 1
Module = plugin1

[plugin_1]
user = tara
host = SERVERNAME
filepath = /etc/passwd
status = enable
下面是针对该问题修改的答案示例(请参见类方法名称):

下面是
script.py
的内容,用于根据文件信息上的
status
值运行插件

from yapsy.PluginManager import PluginManager

# savesessionname(cons.MAIN_CONFIG_PATH, session_name)
simplePluginManager = PluginManager()
simplePluginManager.setPluginPlaces(["plugins"])
simplePluginManager.collectPlugins()
for plugininfo in simplePluginManager.getAllPlugins():
    if plugininfo._PluginInfo__details['plugin_1']['status'] == 'enabled':
        plugininfo.plugin_object.run()
当一切正常时,它将打印
这是插件1

注:

  • 确保yapsy文件信息具有正确的扩展名。默认值为
    yapsy插件
  • 确保信息文件包含
    核心
    部分,其中包含
    名称
    模块
    Module
    上的值必须与插件的模块名称匹配
  • 为了更方便地调试插件,请启用日志记录,即在下面的行中输入
    import logging logging.basicConfig(level=logging.DEBUG)
from yapsy.PluginManager import PluginManager

# savesessionname(cons.MAIN_CONFIG_PATH, session_name)
simplePluginManager = PluginManager()
simplePluginManager.setPluginPlaces(["plugins"])
simplePluginManager.collectPlugins()
for plugininfo in simplePluginManager.getAllPlugins():
    if plugininfo._PluginInfo__details['plugin_1']['status'] == 'enabled':
        plugininfo.plugin_object.run()