在 For 循环中使用布尔值
Use a boolean in a For Loop
我有一个使用 ntfy 向我的 Phone 发送通知的脚本。
它会 ping 设备,如果 Ping 响应错误,它会向我的 Phone 发送通知。
for ip in ap_ips:
try:
ping3.ping(ip)
requests.post(ntfy_adress,
data=("Das Gerät mit der IP-Adresse " + ip + " ist online.").encode(
encoding='utf-8'),
headers={
"Title": ("Unifi AP ist Online!"),
})
except:
requests.post(ntfy_adress,
data=("Das Gerät mit der IP-Adresse " + ip + " ist nicht mehr erreichbar.").encode(encoding='utf-8'),
headers={
"Title": ("Unifi AP ist Offline!"),
"Tags": "warning"
})
脚本应该是 运行 无限循环。
如果 Ping 结果与以前不同,我如何让脚本只发送通知?
您必须在两次执行之间存储状态。在你的 while 循环之前做这样的事情:
status = {}
然后,确认之前的状态不是现在的状态
for ip in ap_ips:
try:
ping3.ping(ip)
if status.get(ip) != "OK":
requests.post(
ntfy_adress,
data=("Das Gerät mit der IP-Adresse " + ip + " ist online.").encode(
encoding="utf-8"
),
headers={
"Title": ("Unifi AP ist Online!"),
},
)
status[ip] = "OK"
except: # You should set explicitly which error type you expect here if ping fails.
if status.get(ip) != "KO":
requests.post(
ntfy_adress,
data=(
"Das Gerät mit der IP-Adresse " + ip + " ist nicht mehr erreichbar."
).encode(encoding="utf-8"),
headers={"Title": ("Unifi AP ist Offline!"), "Tags": "warning"},
)
status[ip] = "KO"
我有一个使用 ntfy 向我的 Phone 发送通知的脚本。
它会 ping 设备,如果 Ping 响应错误,它会向我的 Phone 发送通知。
for ip in ap_ips:
try:
ping3.ping(ip)
requests.post(ntfy_adress,
data=("Das Gerät mit der IP-Adresse " + ip + " ist online.").encode(
encoding='utf-8'),
headers={
"Title": ("Unifi AP ist Online!"),
})
except:
requests.post(ntfy_adress,
data=("Das Gerät mit der IP-Adresse " + ip + " ist nicht mehr erreichbar.").encode(encoding='utf-8'),
headers={
"Title": ("Unifi AP ist Offline!"),
"Tags": "warning"
})
脚本应该是 运行 无限循环。
如果 Ping 结果与以前不同,我如何让脚本只发送通知?
您必须在两次执行之间存储状态。在你的 while 循环之前做这样的事情:
status = {}
然后,确认之前的状态不是现在的状态
for ip in ap_ips:
try:
ping3.ping(ip)
if status.get(ip) != "OK":
requests.post(
ntfy_adress,
data=("Das Gerät mit der IP-Adresse " + ip + " ist online.").encode(
encoding="utf-8"
),
headers={
"Title": ("Unifi AP ist Online!"),
},
)
status[ip] = "OK"
except: # You should set explicitly which error type you expect here if ping fails.
if status.get(ip) != "KO":
requests.post(
ntfy_adress,
data=(
"Das Gerät mit der IP-Adresse " + ip + " ist nicht mehr erreichbar."
).encode(encoding="utf-8"),
headers={"Title": ("Unifi AP ist Offline!"), "Tags": "warning"},
)
status[ip] = "KO"