我写了个终端盯盘工具,按一下 b 键就能假装在编译代码
我写了个终端盯盘工具按一下 b 键就能假装在编译代码项目已更新到 v0.2.1新增持仓与收益显示按t切换、中英界面切换按l、快捷键提示按h并默认全英文 UI 强化「在工作」的伪装。事情是这样的。某天下午三点我第五次切到同花顺看了一眼又切回来继续写代码。动作很流畅不到一秒。但隔壁工位的同事还是注意到了。“你股票亏了多少”我说没亏。他不信。因为屏幕上一片红绿你说没亏谁信啊。但其实问题不是亏不亏而是盯盘这件事本身是公开的。你每一次切屏、每一次盯着红绿数字看都等于在告诉别人——我现在没在工作。哪怕你确实只是扫了一眼就回来改 bug 了那种被抓到的感觉也很不爽。我在终端里工作。一天八个小时不是在 Vim 里就是在 tmux 里。我当时想的是如果能在终端里看行情就好了别人路过看到的全是代码我也用不着来回切窗口了。翻了翻已有的方案都不太对劲tushare/baostock要注册、要 token数据接口是给量化分析用的不是给人盯盘用的。同花顺/东方财富的 Web 版一个浏览器标签页在那摆着标题就写着行情掩耳盗铃。curl 请求然后 grep能用但这个体验讲真你盯不了三分钟。于是我开始写了。选型需求很明确终端里跑不要开浏览器不要 API Key不要注册别人路过看一眼时不能一眼看出是在看股票安装尽量简单第三点是最重要的。纯文本还不够——要是上面写着贵州茅台 1690.00 0.90%懂行的看一眼就知道你在干嘛。必须有一个一键切换伪装模式的功能。所以最后的选型是Python 3.10 标准库 三个第三方包Rich 做终端 UILive TableSina Finance API 做数据源免费的不需要 KeyTOML 做配置文件整个项目叫 BossKey-Stock。这个 BossKey老板键才是核心功能。架构代码不多拆了几个模块bosskey_stock/ ├── __main__.py CLI 入口 ├── app.py 主循环 终端控制 ├── data.py Sina 数据源 ├── boss.py 老板模式伪装 ├── config.py 配置读写 └── i18n.py 中英文案对照表v0.2.1 新增CLI 层没什么好说的argparse 路由几个子命令。配置读写就是 tomlkit 读写 ~/.bosskey.toml。有意思的部分是终端控制和老板模式。Rich LiveRich 自带一个 Live 组件可以在终端里维护一个动态区域内容可以实时更新。实现上它用了 alternate screen buffer——就是 vim、top 那种模式程序退出后终端会恢复到之前的内容。典型用法就是withLive(auto_refreshFalse,screenTrue)aslive:whileTrue:live.update(build_table(),refreshTrue)time.sleep(interval)直接这样写的话刷新间隔内程序是卡死的没法处理键盘输入。所以需要一点改造。非阻塞键盘输入这也是踩坑最多的地方。为什么不用 input()input() 是行缓冲的——它要等到用户按了回车才会返回。但我要的是单键响应按 b 立刻切模式按 q 立刻退出不能等回车。为什么不用 cursescurses 可以做到但它接管了整个终端和 Rich 的 Live 组件有冲突。Rich 依赖底层的终端控制来做色彩和渲染curses 一插手就乱套了。两个库抢终端控制权谁都不让谁。方案直接操作 termios。Python 标准库提供了 termios 和 select可以精确控制终端的行为。核心思路是只改输入的配置不改输出侧。def_setup_tty(fd):attrstermios.tcgetattr(fd)# 输入侧关掉 ICANON逐键模式、ECHO不回显、ISIG不发信号attrs[3]~(termios.ECHO|termios.ICANON|termios.ISIG)# 输出侧不动保留 OPOST确保 \n → \r\n 正常转换termios.tcsetattr(fd,termios.TCSAFLUSH,attrs)改完之后os.read(fd, 1) 就能读到单个按键了不需要回车。然后主循环里用 select 做非阻塞检查def_read_key(fd):r,_,_select.select([fd],[],[],0.5)# 最多等 0.5 秒ifr:returnos.read(fd,1).decode(utf-8,errorsreplace)returnNone这里有个细节select 的 timeout 设成 0.5 秒而不是用非阻塞模式。原因是主循环里还要做定时刷新每 3 秒拉一次行情不能真的阻塞在 read 上。select 返回后如果是超时没按键就继续往下走检查要不要刷新数据。如果用户按了键就处理按键逻辑。这样整个主循环就在一个线程里完成了键盘监听 定时刷新 UI 渲染。不需要后台线程不需要锁。一个容易踩的坑ICRNL。在调试过程中发现一个奇怪的现象回车键(\r)会被转换成换行(\n)导致按键检测出错。这个问题只在某些终端模拟器上出现。查了一下是 termios 的 ICRNL 标志在搞鬼。这个标志会把收到的 \r 自动转成 \n。我的解决方案是关掉它attrs[0]~(termios.ICRNL|termios.IXON)# ICRNL 是关键老板模式老板模式的实现其实很简单。就是按 b 键时切换一个布尔值然后渲染不同的内容ifboss_mode:live.update(boss.render(),refreshTrue)continueboss.render() 生成一段模拟的 Docker build 日志。核心逻辑就是随机选一些步骤组合成看起来像正经构建的输出。为了让日志更逼真我加了一些细节Docker 的构建步骤编号偶尔的 WARNING 信息Running time: MM:SS 的计时器日志每秒滚动两行通过时间来偏移数组位置这些逻辑都在 BossGenerator 类里有个预生成的日志池子5 倍重复后循环滚动。效果还不错——我让公司另一个同事看了看他说你又在折腾 Docker我说对一直在折腾。数据层数据源是 Sina Finance 的行情接口。不需要 API Key只要一个 HTTP 请求GET https://hq.sinajs.cn/listsh600519,sz000001 Referer: https://finance.sina.com.cn返回的是 JavaScript 变量赋值GBK 编码var hq_str_sh600519贵州茅台,1680.00,1675.00,1690.00,1700.00,1670.00,...;解析逻辑不复杂按逗号分割取需要的字段。但有一些需要注意的点代码前缀转换。以 6 和 9 开头的代码是上交所sh 前缀其他是深交所sz 前缀。正则从响应行里提取代码时用的是 hq_str_[a-z](\d) 这个模式。成交量格式化。Sina 返回的成交量单位是股不是手。A 股一手等于 100 股。显示时要转成手为单位。交易时段检测。没必要在非交易日和休息时间刷数据。判断逻辑是周一到周五9:30-11:30 或 13:00-15:00。非交易时段显示 [After Hours] 并展示数据源的最后成交时间。离线处理。网络请求超时或异常时requests 不会抛异常而是返回 None。主循环里检测到 None 会显示 [Offline] 黄色提示并且保留上一次拉到的数据而不是清空表格。v0.2.x持仓收益、中英切换、快捷键提示首版能看行情、能伪装之后这个月又迭代了两版v0.2.0 / v0.2.1几个关键更新持仓与收益显示光看行情还不够摸鱼党还得知道自己赚没赚钱。v0.2.0 加了完整的持仓管理CLI 子命令pos add/pos rm/pos list。pos add是交互式的——从监控列表里多选股票逐个录入股数和成本价自动加入监控列表。TUI 里按t循环切换持仓、成本、持仓收益率、今日收益率列。底部同步汇总总市值 / 总成本、总收益率、今日收益率。收益计算很简单持仓收益 (现价 − 成本) × 股数今日收益 涨跌额 × 股数。收益列红盈绿亏独立着色和行情表反过来一眼看清。中英界面切换v0.2.1 把界面文案全部抽到了 i18n.pykey → (en, zh) 对照表然后默认英文。这个默认值是有讲究的英文界面配合老板模式伪装才完整——中文一眼就能读出持仓“收益这几个词英文对非母语者一眼难读看起来更像在写代码时瞥一眼日志”。切换方式有三种按需选TUI 内按l会话内即时切换CLI 全局参数--lang {en,zh}单次覆盖配置文件 ~/.bosskey.toml 的 [display] lang 设置初始语言。老板模式的日志主体保持英文 Docker 命令只有底部状态行本地化——毕竟 Docker 日志本来就是英文的中英都改了反而穿帮。快捷键提示按h开关底部快捷键提示行默认隐藏维持极简。第一次用不知道按什么键按一下 h 就全列出来了用熟了再按一下隐藏。顺手还清理了一处冗余原来今日收益模式里有个 TodayP/L% 列数值和基础列 Chg%涨跌幅完全一样删了模式 3 现在是 14 列。现在的完整快捷键键功能b老板模式 / 切回行情t切换持仓 / 成本 / 持仓收益 / 今日收益列l中英界面切换h快捷键提示行开关r手动刷新q/ CtrlC退出摸鱼之外回到最开始的问题。这个工具解决的其实不是能看股票而是看股票这件事不给别人带来心理压力。老板键这个概念其实很老了——从 DOS 时代就有按一下 F1 把一个游戏界面变成一张正版的 Lotus 1-2-3 表格。我做的这个只不过是把终端变成了伪装工具。技术上没什么特别高深的。但这个过程让我想通了一件事很多看似偷懒的需求本质是对当前环境的一种不适应。程序员在终端里工作 8 小时偶尔想看一眼行情这是很正常的。不正常的是这个行为在办公室里带有负面的社会信号——“他不好好工作”。工具解决不了这个问题但至少让人少了一点尴尬。安装pipinstallbosskey-stock运行bosskey即可。需要 Python 3.10。当前版本 v0.2.1。相关链接项目源码github.com/Angryshark128/bosskey-stockPyPIpypi.org/project/bosskey-stock使用说明README.md含 normal / boss / demo 三份截图可用 scripts/make_screenshots.py 复现

相关新闻

USB通讯协议栈的处理

USB通讯协议栈的处理

节点是否存在 ls -l /dev/ttyGS2 /dev/ttyACM0 内核:Gadget 串口 / ACM dmesg | grep -iE “ttyGS|g_serial|f_acm|acm|gadget|configfs|usb.*composite” 开机后 acm_gs2 配置(init.Apos.rc 在 boot_completed 设置) getprop | grep -iE “v…

2026/8/10 11:54:44 阅读更多 →
Transformer线性注意力原理与实战:Linformer与Performer对比解析

Transformer线性注意力原理与实战:Linformer与Performer对比解析

如果你正在使用或研究 Transformer 模型,那么“注意力计算太慢、内存占用太高”这个问题,你一定深有感触。尤其是在处理长序列(比如长文档、高分辨率图像、长音频)时,那个 O(n) 的时间和空间复杂度,就像一道…

2026/8/10 11:54:44 阅读更多 →
解锁Typora插件代码块折叠功能:提升技术文档可读性的终极指南

解锁Typora插件代码块折叠功能:提升技术文档可读性的终极指南

解锁Typora插件代码块折叠功能:提升技术文档可读性的终极指南 【免费下载链接】typora_plugin Typora Plugin. Feature Enhancement Tool | Typora 插件,功能增强工具 项目地址: https://gitcode.com/gh_mirrors/ty/typora_plugin 想要让冗长的代…

2026/8/10 11:54:44 阅读更多 →

最新新闻

如何免费定制专属机械键盘:36个Cherry MX键帽3D模型的完整指南

如何免费定制专属机械键盘:36个Cherry MX键帽3D模型的完整指南

如何免费定制专属机械键盘:36个Cherry MX键帽3D模型的完整指南 【免费下载链接】cherry-mx-keycaps 3D models of Chery MX keycaps 项目地址: https://gitcode.com/gh_mirrors/ch/cherry-mx-keycaps 你是不是也曾经为机械键盘寻找独特的键帽而烦恼&#xff…

2026/8/10 12:48:38 阅读更多 →
星露谷物语自动化模组完整指南:5个必装工具彻底解放农场管理时间

星露谷物语自动化模组完整指南:5个必装工具彻底解放农场管理时间

星露谷物语自动化模组完整指南:5个必装工具彻底解放农场管理时间 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods 你是否曾经因为每天在星露谷物语中重复劳作而感到疲惫&#…

2026/8/10 12:48:38 阅读更多 →
TypeScript 开发环境搭建指南:从零配置到项目验证

TypeScript 开发环境搭建指南:从零配置到项目验证

这次我们来看 TypeScript 基础环境的搭建。对于前端开发者或 Node.js 后端开发者来说,TypeScript 早已不是可选项,而是提升代码质量、团队协作效率和项目可维护性的必备工具。但很多人在第一步——环境安装上就会遇到各种问题:Node.js 版本不…

2026/8/10 12:48:38 阅读更多 →
3大突破:用DashPlayer将英语学习从“被动输入“升级为“主动输出“

3大突破:用DashPlayer将英语学习从“被动输入“升级为“主动输出“

3大突破:用DashPlayer将英语学习从"被动输入"升级为"主动输出" 【免费下载链接】DashPlayer 为英语学习者量身打造的视频播放器,助你通过观看视频、沉浸真实语境,轻松提升英语水平。#美剧 #播放器 #听力 项目地址: htt…

2026/8/10 12:48:38 阅读更多 →
Grok中的表格怎么导出?AI导出鸭一招终结格式崩坏

Grok中的表格怎么导出?AI导出鸭一招终结格式崩坏

Grok中的表格怎么导出?AI导出鸭一招终结格式崩坏 痛点驱动:当AI表格导出变成“数据灾难” 作为技术架构师,我长期负责AI工程化落地项目。团队最近接入Grok API进行数据洞察分析,遇到一个极其典型却又令人头疼的问题:表…

2026/8/10 12:48:38 阅读更多 →
终极指南:如何用m3u8-downloader快速下载加密视频

终极指南:如何用m3u8-downloader快速下载加密视频

终极指南:如何用m3u8-downloader快速下载加密视频 【免费下载链接】m3u8-downloader 一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。 项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-downlo…

2026/8/10 12:47:37 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →