0

我有一个 python 模块问题:

我需要编写一个脚本,该脚本将从各种硬件中获取输出,然后将它们存储在数据库中。我知道当前的硬件,但我不知道将来会添加任何其他硬件。对不起,让我说得更具体一些。

该脚本将从连接到配电板的硬件模块中检索电源信息。这些模块获取原始传感器信息并通过 tcp/ip 使其可用。我已经在测试脚本中编写了询问硬件模块并收集信息的函数。问题是这需要部署在使用不同硬件模块的地方,而不仅仅是我知道的那些。所有硬件模块都将提供相同的信息,但它们都会以不同的方式进行。有些使用 telnet 或 ssh,有些提供网页,有些提供和 xml 输出,有些会使用 snmp。我想创建一种机制,可以为新设备编写 python 模块,该设备可以提取信息并以标准方式将其提供给脚本,以便脚本可以填充数据库并且生活照常进行。

因此,不是每次遇到新的硬件模块类型时都向脚本添加一个新函数,然后将其包装在“if”语句等中……有没有一种机制可以将该函数卸载到可以动态添加到模块中的模块中脚本。我想我想到了一个插件类型机制。但我认为这不太合适。

任何关于使用或实施此类东西的地方的建议或指示将不胜感激。

4

1 回答 1

0

您可以在代码中使用导入功能。根据您的 Python 版本,尝试importlib(在 Python 2.7 中添加)或__import__函数。

您可以为要支持的每个硬件设备创建插件。然后,每个这样的插件都可以在某处注册自己(主模块路径放在环境变量中或 Windows 注册表中的已知路径)。然后,您的代码将检查该位置(定期,在启动时 - 取决于您的需要)并加载找到的每个插件。您还可以使用distutils并将插件打包为egg包。

请注意,虽然当您从 Python 源代码运行时它运行良好,但如果您计划使用 PyInstaller 或 Py2exe 构建可执行文件,它会变得更加复杂。

于 2012-08-30T12:37:37.290 回答