我正在开发一个监视服务失败的脚本,并根据是否存在故障启动另一个不同的操作。
我需要一个python脚本来监视python程序“monitor-services”的输出,并解析输出搜索中出现的单词“failure”。如果存在,脚本应返回true值,如果没有出现“failure”,则运行最多30秒返回false。
“monitor-services”返回的示例输出:
{Device} [/device/xxx] Networks = dbus.Array([dbus.ObjectPath('/device/xxx/xxx'), dbus.ObjectPath('/device/00242b2e41b6/hidden')], signature=dbus.Signature('o'), variant_level=1) {Service} [/profile/default/wifi_xxx_managed_wep] State = association {Profile} [/profile/default] Services = dbus.Array([dbus.ObjectPath('/profile/default/wifi_xxx_managed_wep'), dbus.ObjectPath('/profile/default/wifi_xxx_managed_rsn')], signature=dbus.Signature('o'), variant_level=1) {Manager} [/] Services = dbus.Array([dbus.ObjectPath('/profile/default/wifi_xxx_managed_wep'), dbus.ObjectPath('/profile/default/wifi_xxx_managed_rsn')], signature=dbus.Signature('o'), variant_level=1) {Service} [/profile/default/wifi_xxx_managed_wep] **failure** {Service} [/profile/default/wifi_xxx_managed_wep] State = idle
任何帮助都将不胜感激。
[edit]在触发脚本的操作30秒左右可能会发生故障,因此脚本需要在30秒后终止。 [/编辑]
答案 0 :(得分:1)
#!/usr/bin/python
from subprocess import Popen, PIPE
import sys
data = Popen(["monitor-services"], stdout=PIPE).communicate()[0]
sys.exit("failure" in data)
这可以做你想要的一切,除了30秒等待(我不明白)。请注意,如果找不到失败则返回0,如果找到则返回1,根据shell约定(即0表示成功,非零表示失败)。