我编写了一个脚本,用于在发布新的Nexus 工厂映像时将更新推送到 Pushbullet 频道。该页面上的前 11 台设备中的每台都有一个单独的频道,我正在使用一个相当复杂的脚本来监视更新。完整的设置在这里(特别是这个脚本),但我将简要总结下面的脚本。我的问题是:这显然不是正确的做法,因为它很容易出现多点故障。有什么更好的方法来做到这一点?我宁愿坚持使用 Python,但如果它们更简单/更好,我愿意接受其他语言。
(这个问题是由于我今晚更新了我的 apache 2.4 配置,它显然触发了由 观看的本地文件的输出的轻微变化urlwatch
,因此所有 11 个频道都收到了错误的更新推送给他们。)
基本脚本功能(不包括一些非必要部分):
- 创建与其完整型号名称关联的每个设备代号的字典
- 使用请求获取现有的 Nexus 工厂图像页面
- 从源代码制作bs4对象
- 对于字典(循环)中的 11 个设备中的每一个,执行以下操作:
- 在设备的公共 Web 目录中打开/创建页面
- 将源代码写入该页面,使用 bs4 过滤:
str(soup.select("h2#" + dev + " ~ table")[0])
- 在页面上调
urlwatch
用以检查更新,将输出保存到临时文件 - 如果临时文件大小> 0,则页面已更改,因此将更新推送到适当的频道
- 删除网页和临时文件
我在输入这个问题时的一个想法:可能的解决方案是将每个当前版本字符串(例如:)保存5.1.0 (LMY47I)
为腌制变量,然后如果urlwatch
检测到差异,它将新版本字符串与腌制的字符串进行比较,并且只推送如果他们不同?我也会加入正则表达式匹配,以确保新格式与旧格式匹配并且刚刚更新了数据,但这至少可以作为一个很好的临时措施来防止未来的误报吗?