新闻详情

新闻详情

首页 / 资讯中心 / 详情

不止一条命令:Open Terminal交互式PTY终端与WebSocket实时I/O实战指南

发布时间:2026/9/29 4:02:28来源:尧图网络
不止一条命令:Open Terminal交互式PTY终端与WebSocket实时I/O实战指南
不止一条命令:Open Terminal交互式PTY终端与WebSocket实时I/O实战指南【免费下载链接】open-terminalA computer you can curl ⚡项目地址: https://gitcode.com/gh_mirrors/ope/open-terminalOpen Terminal是一个可以被 curl 的电脑⚡一个轻量级自托管终端服务让 AI 智能体和自动化工具通过简单的 REST API 与 WebSocket 就能远程执行命令、管理文件。除了普通的跑一条命令拿结果它还内置了交互式 PTY 终端——你可以像真人一样与远程 shell 实时敲键盘、看彩色输出本文带你从零上手这套 实时 I/O 玩法。为什么需要交互式终端普通远程执行 API 只能提交命令 → 等结果遇到这些场景就束手无策了 进入 Python / Node.js 的REPL逐行调试️ 运行top、vim、htop等TUI 程序需要持续输入和动态刷新 给正在运行的程序喂输入回答交互提示、发送 Ctrl-C 中断Open Terminal 从 v0.7.0 开始支持完整 PTY 终端会话遵循 JupyterLab/Kubernetes 的经典模式先创建会话再通过 WebSocket 附着attach非阻塞 I/O 保证终端不会拖慢其他 API 请求。一键启动Docker 或裸机两种方式# Docker 方式推荐沙箱隔离 docker run -d --name open-terminal --restart unless-stopped -p 8000:8000 \ -v open-terminal:/home/user -e OPEN_TERMINAL_API_KEYyour-secret-key \ ghcr.io/open-webui/open-terminal# 裸机方式pip 安装命令直接跑在你的机器上 uvx open-terminal run --host 0.0.0.0 --port 8000 --api-key your-secret-key启动后访问http://localhost:8000/docs即可查看完整的交互式 API 文档。详细说明见 README.md。 不设置 API key 时会自动生成一个用docker logs open-terminal就能拿到。PTY 终端 API四个接口玩明白交互式终端由POST/GET/DELETE /api/terminalsWS /api/terminals/{id}四个端点构成核心实现位于 main.py步骤接口作用1️⃣ 创建POST /api/terminals分配一个真实 PTY返回 8 位session_id2️⃣ 查看GET /api/terminals列出当前用户/会话下的活跃终端3️⃣ 附着WS /api/terminals/{id}双向实时收发真正的敲键盘看屏幕4️⃣ 销毁DELETE /api/terminals/{id}杀掉进程并清理资源创建会话时服务在 Linux 上调用pty.openpty()打开伪终端默认窗口 24 行 × 80 列并把TERM设为xterm-256color所以ls --color的彩色输出、vim 的界面都能正常渲染见 runner.py 中的PtyRunner实现。几个贴心的细节 非阻塞 I/OPTY 读取跑在线程池里16 个并发会话可通过OPEN_TERMINAL_MAX_SESSIONS调整互不阻塞 自动清理WebSocket 断开后会话自动回收创建新会话前会先清掉已死亡的旧会话 Windows 兼容通过pywinptyConPTY提供WinPtyRunnerWindows 上同样可用 会话隔离按X-User-Id/X-Session-Id头校验归属其他用户看不到也连不上你的终端WebSocket 实时 I/O协议就三步这是全文最精华的部分完整实现见 ws_terminal。协议非常简洁第 1 步首消息认证连接建立后 10 秒内客户端必须发送第一帧 JSON 文本{type: auth, token: 你的API_KEY}认证失败会被以4001码直接关闭连接。第 2 步双向二进制 I/O⌨️ 客户端发送二进制帧→ 就是键盘输入每个字节都直接写入 PTY 的 stdin 服务端发送二进制帧→ PTY 的原始输出stdout/stderr 已合并和真实终端行为一致第 3 步文本帧控制窗口大小{type: resize, cols: 120, rows: 40}发送一条文本 JSON 即可调整终端行列数TUI 程序会立即按新尺寸重排界面。用 Python 客户端websockets库的示意理解流程即可不必照搬import asyncio, json, websockets async def main(): async with websockets.connect(ws://localhost:8000/api/terminals/abc12345) as ws: await ws.send(json.dumps({type: auth, token: 你的API_KEY})) async def feed(): # 模拟键盘输入 while True: key input(按键: ).encode() b\n await ws.send(key) async def watch(): # 实时打印终端输出 async for out in ws: if isinstance(out, bytes): print(out.decode(errorsreplace), end) await asyncio.gather(feed(), watch())进阶AI 也能看着屏幕敲键盘v0.12.4 之后Open WebUI 中的 AI 助手可以直接读取你连接的终端最近的输出并向其发送文本——包括回答运行中程序弹出的交互提示。这两个端点设计得很有讲究GET /api/terminals/user/output—— 先读屏看看前台程序在等什么见 main.pyPOST /api/terminals/user/input—— 再敲键盘发送真实换行即可提交输入 最佳实践先读再写。发送输入前先看一眼屏幕避免前台已有程序在运行时误操作。安全与配置要点API Key 必配HTTP 与 WebSocket 认证都使用常量时间比较hmac.compare_digest防止时序攻击key 建议放在config.toml里避免出现在ps输出中⚠️裸机模式风险命令直接以你的权限运行生产环境强烈建议用 Docker 沙箱⚠️多用户模式OPEN_TERMINAL_MULTI_USERtrue只隔离工作区不构成安全边界仅适合全员互信的小团队需要真正隔离请用每用户独立实例 不需要终端功能时可设OPEN_TERMINAL_ENABLE_TERMINALfalse直接卸载全部终端路由与 WebSocket 端点配置文件优先级CLI 参数 环境变量 用户配置~/.config/open-terminal/config.toml 系统配置/etc/open-terminal/config.toml详见 config.py。小结把远程电脑玩出花能力关键 API一句话总结后台跑命令POST /execute适合脚本化、轮询取结果交互式终端POST /api/terminalsWS真实 PTYREPL/TUI/彩色输出全支持AI 接管终端/api/terminals/user/output/input让模型读屏 敲键盘回答交互提示Open Terminal 把能跑命令升级成了像人一样用终端一个 PTY 会话 一条 WebSocket就能在浏览器或 AI 聊天框里获得完整的交互 shell 体验。接下来不妨试着在终端里跑一个python -i或top亲手感受下实时 I/O 的丝滑吧 核心源码导航终端会话管理 open_terminal/main.py、PTY 进程运行器 open_terminal/utils/runner.py、进程日志 open_terminal/utils/log.py、完整更新历史 CHANGELOG.md【免费下载链接】open-terminalA computer you can curl ⚡项目地址: https://gitcode.com/gh_mirrors/ope/open-terminal创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

VMware安装Ubuntu 22.04全流程指南与常见坑解决方案 2026/9/29 4:52:19

VMware安装Ubuntu 22.04全流程指南与常见坑解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
YOLOv11球类轨迹预测与运动员动作识别融合实践 2026/9/29 4:52:12

YOLOv11球类轨迹预测与运动员动作识别融合实践

简介:这份PDF文档面向计算机视觉学习者、体育数据分析爱好者与深度学习实践者,围绕YOLOv11在体育赛事场景中的落地展开,重点讲解球类轨迹预测与运动员动作识别两类模型的融合思路。全文共32页,从YOLOv11骨干网络、颈部网络与检测头…

阅读更多 →
USB设备识别不到?揭秘CDC枚举失败的固件级根因与5个关键检查点 2026/9/29 4:52:12

USB设备识别不到?揭秘CDC枚举失败的固件级根因与5个关键检查点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
电影推荐系统毕设:协同过滤与Django实战指南 2026/9/29 4:52:05

电影推荐系统毕设:协同过滤与Django实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
嵌入式内存管理详解:从硬件存储到泄漏碎片排查 2026/9/29 4:51:59

嵌入式内存管理详解:从硬件存储到泄漏碎片排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
HelloCard 网页贺卡生成器:用华为云码道(CodeArts)2 小时造一张能转发的网页祝福,TaoToken 配置骨架一并给你 2026/9/29 4:51:59

HelloCard 网页贺卡生成器:用华为云码道(CodeArts)2 小时造一张能转发的网页祝福,TaoToken 配置骨架一并给你

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉