Python中如何实现微信监控程序运行状态

不知道大家有没有过这样的经历:

  • 电脑上跑着代码,人走开了,在外面特别挂念,想知道那代码跑得怎样了…

  • 写了个小程序,监控某个网页的变化,但没有比较实时的通知方式,邮件太重、短信又不好搞

在过去,这样的问题有时会困扰我。

不过现在,我可以把警告 /日志发到我的微信上。

from wxpy import get_wechat_logger

获得 Logger

logger = get_wechat_logger()

发送警告

logger.warning(‘这是一条 WARNING 等级的日志!’)

捕获可能存在的异常,并发送

try: 1 / 0 except: logger.exception(‘又出错啦!’)

这样,不管我在哪,都可以第一时间收到程序的重要信息。

wxpy 发送日志

关于 wxpy

上面代码中所使用的 wxpy 模块,是我最近开发的个人微信号 API ,有微信就能用,无需申请公众号。

除了上面的 logging 功能外,还集成了一些特色功能,比如:自动聊天(利用图灵机器人)、查看共同好友,统计好友或群的性别地区分布等等。

当然,也覆盖了微信个人号的大部分基本功能。

wxpy 在设计上注重“接口的使用体验”,并配有完善的文档。

目前已开发 4 周,基本每天都有 commit 。

GitHub 主页

https://github.com/youfou/wxpy

希望更多朋友加入进来,一起挖掘更多有意思的玩法!


Python中如何实现微信监控程序运行状态

34 回复

还不如弄个测试公众号,比这稳定多了


要监控Python程序在微信中的运行状态,最直接的方式是通过微信机器人库发送状态信息。这里推荐使用itchatwxpy库,不过itchat已停止维护,建议用wechatpy或企业微信方案。

下面是一个使用wechatpy通过企业微信发送监控状态的完整示例:

import time
import psutil
from wechatpy.enterprise import WeChatClient

class WeChatMonitor:
    def __init__(self, corp_id, corp_secret, agent_id):
        """初始化企业微信客户端"""
        self.client = WeChatClient(corp_id, corp_secret)
        self.agent_id = agent_id
        
    def send_status(self, message):
        """发送状态消息到企业微信"""
        try:
            self.client.message.send_text(self.agent_id, message)
            print(f"状态已发送: {message}")
        except Exception as e:
            print(f"发送失败: {e}")
    
    def monitor_program(self, program_name, check_interval=60):
        """监控指定程序的运行状态"""
        while True:
            is_running = False
            
            # 检查进程是否存在
            for proc in psutil.process_iter(['name']):
                if program_name.lower() in proc.info['name'].lower():
                    is_running = True
                    break
            
            status = "运行中" if is_running else "已停止"
            timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
            message = f"[程序监控]\n程序: {program_name}\n状态: {status}\n时间: {timestamp}"
            
            self.send_status(message)
            time.sleep(check_interval)

# 配置信息(需要替换为实际值)
CORP_ID = "你的企业ID"
CORP_SECRET = "你的应用Secret"
AGENT_ID = "你的应用AgentId"

# 使用示例
if __name__ == "__main__":
    monitor = WeChatMonitor(CORP_ID, CORP_SECRET, AGENT_ID)
    
    # 测试发送一条状态
    monitor.send_status("程序监控服务已启动")
    
    # 开始监控指定程序(例如监控python.exe)
    monitor.monitor_program("python.exe", check_interval=300)  # 每5分钟检查一次

实现要点:

  1. 企业微信配置

    • 注册企业微信,创建应用获取corp_idcorp_secretagent_id
    • 比个人微信更稳定,没有封号风险
  2. 监控逻辑

    • 使用psutil库检测进程是否存在
    • 可监控CPU/内存使用率:psutil.cpu_percent()psutil.virtual_memory().percent
  3. 扩展功能

    # 监控资源使用情况
    cpu_usage = psutil.cpu_percent(interval=1)
    mem_usage = psutil.virtual_memory().percent
    message = f"CPU使用率: {cpu_usage}%\n内存使用率: {mem_usage}%"
    
  4. 异常处理增强

    def safe_monitor(self):
        while True:
            try:
                # 监控逻辑
                pass
            except Exception as e:
                self.send_status(f"监控异常: {str(e)}")
                time.sleep(60)
    

替代方案:如果必须用个人微信,可以用wxautowechatbot,但稳定性较差。

总结:用企业微信API最可靠。

我弄了,用测试号推送我想要的东西,利用模版消息接口。最近用 go 重写,快完了。

发给文件传输助手会有提醒么?

http://sc.ftqq.com
推荐用这个……

用方糖不就好了

问题题外话,楼主你们都是怎么注册服务号的呢?自己注册工作室的?

全面优化接口,更有 Python 范儿
hhhhh 之前看 itchat 也有这想法

我们是通过企业号实现的

都说了不用申请公众号

看了下 Github ,楼主应该发过帖子了吧?我还加过群,只是碍于这种微信不能长期在线,所有还是用方糖和公众号测试号吧

我当然知道,我说的是自建服务

pc 版利用文件助手发给自己

哈哈,一起来做吧

这个不错

楼主,能否在没有 X 的情况下使用啊?因为在超算上跑的程序不会给 X 啊。。。。

X 是什么,关闭按钮吗?

X server

图形界面

抱歉,原谅我这个产品汪太无知… 没考虑这种情况呢

产品会写代码……挺厉害的……

可以另外使用 console_qr 参数初始化 Bot 对象,然后再传入到 get_wechat_logger() 中
具体说明请看 http://wxpy.readthedocs.io/zh/latest/bot.html?highlight=console_qr#wxpy.Bot

看了下 core 好像还是用的 itchat
就是 itchat 套了一层。。。

目前在用 ifttt 做重要信息推送,比较方便。

是的,重点在优化接口,内部大量套用,少量重写

之前在 trending 上看见了,很厉害啊

需要一直登录网页版?模拟的就是网页端?

钉钉这么好用!

Good. Thanks.

最讨厌的事就是收到监控日志了

回到顶部