python實(shí)現(xiàn)發(fā)消息提醒功能的常見(jiàn)方法
之前一直以為 python 發(fā)消息,必須依賴(lài)第三方庫(kù),比如 plyer。

今天使用AI編寫(xiě)消息提醒功能,才發(fā)現(xiàn)還可以這樣玩的。
import subprocess
ps_script = f'''
Add-Type -AssemblyName System.Windows.Forms
$global:balloon = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -Id $pid).Path
$balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Info
$balloon.BalloonTipText = '提醒內(nèi)容'
$balloon.BalloonTipTitle = '提醒標(biāo)題'
$balloon.Visible = $true
$balloon.ShowBalloonTip(10000)
Start-Sleep -Seconds 10
$balloon.Dispose()
'''
# 執(zhí)行PowerShell腳本
result = subprocess.run(
['powershell', '-Command', ps_script],
capture_output=True,
text=True,
timeout=15
)
python 通過(guò)調(diào)用 powershell 腳本來(lái)讓 powershell 發(fā)送消息,好巧妙啊。
相應(yīng)的,也可以在 MacOS 和 Linux 環(huán)境這樣發(fā)消息。
def _show_macos_notification(self, title, message):
"""在macOS系統(tǒng)顯示通知"""
try:
script = f'display notification "{message}" with title "{title}"'
subprocess.run(['osascript', '-e', script], timeout=5)
except Exception as e:
print(f"顯示macOS通知失敗: {e}")
def _show_linux_notification(self, title, message):
"""在Linux系統(tǒng)顯示通知"""
try:
subprocess.run([
'notify-send',
title,
message
], timeout=5)
except Exception as e:
print(f"顯示Linux通知失敗: {e}")
再配合上一個(gè)環(huán)境識(shí)別的 API —— platform.system(),完全不依賴(lài)第三方,真完美!
知識(shí)擴(kuò)展
用Python實(shí)現(xiàn)消息提醒的方式不少,從簡(jiǎn)單的桌面彈窗到跨平臺(tái)的即時(shí)通訊(IM)軟件推送,各有各的適用場(chǎng)景。
我的建議是,日常使用可以?xún)?yōu)先選擇統(tǒng)一通知庫(kù)(如Apprise)來(lái)提高效率;而工作中,直接使用平臺(tái)的官方API往往是更穩(wěn)定、長(zhǎng)久的選擇。
桌面通知(Windows / macOS / Linux)
日常開(kāi)發(fā)或本地測(cè)試用很方便,適合腳本運(yùn)行完成、報(bào)錯(cuò)等場(chǎng)景??缙脚_(tái)推薦用 Plyer,僅在Win10/11上可考慮 win10toast。提示:務(wù)必從官網(wǎng)獲取證書(shū)和詳細(xì)操作指南,勿使用不明來(lái)源的庫(kù)。
示例:使用 Plyer(跨平臺(tái))
from plyer import notification
notification.notify(
title="任務(wù)完成",
message="數(shù)據(jù)處理已完成!",
timeout=5 # 通知顯示時(shí)長(zhǎng)(秒)
)示例:使用 win10toast(僅 Windows)
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("提醒", "該休息一下啦", duration=10)電子郵件通知
通過(guò) SMTP 發(fā)送郵件,適合不需要即時(shí)回復(fù)的場(chǎng)景,推薦用于系統(tǒng)告警、日志等。
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = '報(bào)告生成完畢'
msg['From'] = 'sender@example.com'
msg['To'] = 'receiver@example.com'
msg.set_content('您的月度報(bào)告已生成,請(qǐng)查收附件。')
# 以 Gmail 為例,使用 SMTP 發(fā)送
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
server.login('your_email@gmail.com', 'your_password')
server.send_message(msg)手機(jī)短信通知
配合 Twilio 等服務(wù)商 API,適合驗(yàn)證碼、重要警報(bào)等必須保證接收的場(chǎng)景。
from twilio.rest import Client
account_sid = 'your_account_sid'
auth_token = 'your_auth_token'
client = Client(account_sid, auth_token)
message = client.messages.create(
body='服務(wù)器負(fù)載過(guò)高,請(qǐng)檢查!',
from_='+1234567890', # Twilio 提供的號(hào)碼
to='+0987654321' # 你的手機(jī)號(hào)
)即時(shí)通訊機(jī)器人(IM)
國(guó)內(nèi)最常用的是釘釘/飛書(shū)/企業(yè)微信,國(guó)外多用 Slack/Telegram,適合團(tuán)隊(duì)協(xié)作和反饋。
示例:釘釘群機(jī)器人
import requests, json
webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=xxx'
data = {"msgtype": "text", "text": {"content": "構(gòu)建失敗,請(qǐng)檢查日志!"}}
requests.post(webhook_url, json=data)統(tǒng)一通知庫(kù):Apprise
如果你厭倦了為每個(gè)平臺(tái)寫(xiě)不同代碼,Apprise 可以讓你一套代碼通吃幾乎所有平臺(tái)。
安裝與使用
import apprise
ap = apprise.Apprise()
# 一行代碼接入一個(gè)平臺(tái),支持 70+ 服務(wù)
ap.add('telegram://bot_token/chat_id')
ap.add('mailto://user:pass@gmail.com')
ap.add('dingtalk://access_token?secret=xxx')
ap.add('slack://token_a/token_b/token_c')
# 一鍵群發(fā)
ap.notify(title='系統(tǒng)通知', body='所有服務(wù)運(yùn)行正常')命令行用法
apprise -t "磁盤(pán)告警" -b "根分區(qū)使用率超過(guò)90%" "mailto://user:pass@gmail.com"
進(jìn)階:NotifyAll還有像notifyall這樣的替代庫(kù),提供了條件發(fā)送、延遲發(fā)送等高級(jí)功能:
import notifyall
n = notifyall.Notify()
n.add("telegram://bot_token/chat_id")
n.notify_if(cpu_usage > 90, "CPU負(fù)載過(guò)高!")
n.notify_repeat("這是一個(gè)提醒", times=3, interval=300)到此這篇關(guān)于python實(shí)現(xiàn)發(fā)消息提醒功能的常見(jiàn)方法的文章就介紹到這了,更多相關(guān)python消息提醒內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)計(jì)算對(duì)象的內(nèi)存大小示例
這篇文章主要介紹了Python實(shí)現(xiàn)計(jì)算對(duì)象的內(nèi)存大小,結(jié)合實(shí)例形式分析了Python使用sys.getsizeof與遞歸算法計(jì)算對(duì)象占用內(nèi)存的相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
如何解決PyCharm顯示:無(wú)效的Python?SDK
這篇文章主要介紹了在不同電腦之間傳輸Python項(xiàng)目時(shí)遇到的路徑問(wèn)題,并提供了解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
Python編寫(xiě)判斷真實(shí)文件類(lèi)型工具
常在河邊走,哪能不濕鞋,網(wǎng)上獲取的各種文件后綴真真假假,甚至一不小心就會(huì)中招,所以本文就來(lái)用Python編寫(xiě)一個(gè)判斷真實(shí)文件類(lèi)型工具吧2025-01-01
如何利用Python統(tǒng)計(jì)正數(shù)和負(fù)數(shù)的個(gè)數(shù)
Python檢查數(shù)據(jù)中的正/負(fù)數(shù)是一種常見(jiàn)的數(shù)據(jù)處理操作,可以通過(guò)編寫(xiě)代碼來(lái)實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于如何利用Python統(tǒng)計(jì)正數(shù)和負(fù)數(shù)的個(gè)數(shù)的相關(guān)資料,需要的朋友可以參考下2024-05-05
python使用tqdm庫(kù)實(shí)現(xiàn)循環(huán)打印進(jìn)度條
tqdm是一個(gè)用于在Python中添加進(jìn)度條的庫(kù),它可以很容易地集成到while循環(huán)中,這篇文章主要介紹了python循環(huán)打印進(jìn)度條,需要的朋友可以參考下2023-05-05
Python 玩轉(zhuǎn)圖像格式轉(zhuǎn)換操作
這篇文章主要介紹了Python 玩轉(zhuǎn)圖像格式轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
深入理解Python __init_subclass__的使用
本文主要介紹了Python __init_subclass__的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-05-05
python基礎(chǔ)教程之csv格式文件的寫(xiě)入與讀取
逗號(hào)分隔值(Comma-Separated Values,CSV,也稱(chēng)為字符分隔值,分隔字符也可以不是逗號(hào)),新這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)教程之csv格式文件的寫(xiě)入與讀取的相關(guān)資料,需要的朋友可以參考下2022-03-03

