在 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"