惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
DataBreaches.Net
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
IT之家
IT之家
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
月光博客
月光博客
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
腾讯CDC
B
Blog RSS Feed
博客园 - Franky
爱范儿
爱范儿

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
利用 Keyboard Maestro 做轻量级的网速监控小脚本 - 少数派
2018-06-03 · via 少数派

0. 背景和需求

就日常工作而言,查看电脑当前状态的是一个非常低频的需求,所以即便市面上已经有各种监控软件,依然觉得解决方案过于繁重。但近日确实遇到了需要查看当前网速的场景,我不希望为此安装一个软件,也不希望因此占据工具栏,因此考虑使用轻量级的脚本工具解决。

1. 实现思路

1.1 网速监控公式

经查阅,发现有一个叫psutil的 Python 模块可以实现网络监控。我们要统计网速,无非是 计算在一秒的时间段内,网络流量的变化情况。

psutil的网速监控模块文档说明
psutil的网速监控模块文档说明
## 该函数写法如下
def net_speed_test():
        ## 我们首先计算一个网卡的当前流量
    s1 = psutil.net_io_counters(pernic=True)['en0'] 
        ## 等待1秒,理论上也可以等待多秒,然后除掉这段时间
    time.sleep(1)
        ## 再计算同一个网卡当前流量
    s2 = psutil.net_io_counters(pernic=True)['en0']
        ## 因为我关心的是接收的网速,所以取 bytes_recv 作差
    result = s2.bytes_recv - s1.bytes_recv
        ## 除以 1024,转化为 kb
    return str(result/1024) + 'kb/s'

1.2 Python Fire

因为考虑到 KM 最终会通过命令行调用来触发这个脚本,所以考虑使用 Python Fire。Python Fire 是 Google 出的一个模块,可以把 Python 脚本里的对象封装成命令行可以调用的脚本。

2. 最终脚本编写

如果你还没有安装过这几个模块,还是要打开终端先安装:psutil、fire、time
分别输入pip3 install psutilpip3 install firepip3 install time

脚本内容如下,保存为一个python文件。

#!/anaconda3/bin/python3

import psutil
import fire
import time

def net_speed_test():
    s1 = psutil.net_io_counters(pernic=True)['en0']
    time.sleep(1)
    s2 = psutil.net_io_counters(pernic=True)['en0']
    result = s2.bytes_recv - s1.bytes_recv
    return str(result/1024) + 'kb/s'

if __name__ == '__main__':
    fire.Fire(net_speed_test)

3. KM 设置

  1. 触发形式: 无所谓,我使用 Command + N (代表 network)
  2. 循环逻辑: 因为查看网速时,会希望看到网速变化,这样才能完成对网速的整体评估,设置5次循环比较合理
  3. 执行方法: 选择执行 shell 脚本,python3解析器位置 + 脚本目录
    KM设置截图
    KM设置截图

如果不知道 python3 解析器位置,可以打开终端,输入 which python3 。which 这个命令可以在 PATH 变量里帮你找到。

小提示:可以在终端使用 which 命令找到 python3 解析器
小提示:可以在终端使用 which 命令找到 python3 解析器

从上图所示,我的 python3 解析器位置是 /anaconda3/bin/python3,然后这个脚本的路径又是在 /Users/patrick/CodeLab/net_speed_test.py。所以我的写法就是 /anaconda3/bin/python3 /Users/patrick/CodeLab/net_speed_test.py

小提示2: 如果依然失败,可以把这个脚本直接添加为可执行脚本。

  1. 打开终端,输入 chmod +x 脚本路径.py (后面是脚本路径,例如 /Users/patrick/CodeLab/net_speed_test.py)
  2. 完成后,在 KM 中选择 Excute script file
    成功添加为可执行脚本后,可以直接执行
    成功添加为可执行脚本后,可以直接执行
  3. 点击 try 可以进行尝试,在右侧的 display results briefly 也可以进行其他展示形式的调整。

4. 最终效果

在任意位置触发快捷键,在接下来的5秒,脚本就会自动计算当前网速,以通知的形式弹出。

点击 Command + N,右上角通知显示网速
点击 Command + N,右上角通知显示网速

5. 延伸阅读

psutil 文档
Python Fire 文档