当前位置: 首页 > news >正文

ssh+tmux实现socket命令行交互

要在python3 znc.py die0_uart0 17100这种“串口转发/交互会话”里自动输入命令,关键是:进程必须运行在tmux pane(有伪终端),然后用 tmux 的send-keys往该 pane 注入按键。


ssh+tmux实现python socket通信

1) 基本方式:tmux 里启动 znc,再 send-keys 输入

1.1 启动会话(远端执行)

sshuser@runtime' tmux new-session -d -s znc0 "python3 -u znc.py die0_uart0 17100" '

1.2 向该串口“输入命令 + 回车”

sshuser@runtime' tmux send-keys -t znc0:0.0 "help" C-m '
  • -t znc0:0.0:session=znc0,window=0,pane=0
  • C-m:回车(Enter)

你也可以连续发送多条:

sshuser@runtime' tmux send-keys -t znc0:0.0 "cmd1" C-m tmux send-keys -t znc0:0.0 "cmd2" C-m '

2) Python 里实现(ssh 执行 tmux 命令)

importsubprocessimportshlex host="user@runtime"target="znc0:0.0"defssh(cmd:str):subprocess.check_call(["ssh",host,cmd])# 1) 启动 znc(若已存在可先 kill-session)ssh('tmux kill-session -t znc0 2>/dev/null || true')ssh('tmux new-session -d -s znc0 "python3 -u znc.py die0_uart0 17100"')# 2) 发送命令defsend(cmd:str):# 注意引号转义ssh(f"tmux send-keys -t{shlex.quote(target)}{shlex.quote(cmd)}C-m")send("help")send("version")

3) 同时还要“抓日志”:pipe-pane + send-keys 组合

这样既能输入,也能实时落盘:

sshuser@runtime' LOG=/var/log/emu/znc_uart0.log tmux kill-session -t znc0 2>/dev/null || true tmux new-session -d -s znc0 "python3 -u znc.py die0_uart0 17100" tmux pipe-pane -t znc0:0.0 -o "cat >>$LOG" tmux send-keys -t znc0:0.0 "help" C-m '

4) 可靠性注意事项(很关键)

  1. 确保进程真的在 pane 里起来了:否则 send-keys 没对象。
    可检查:

    tmux has-session-tznc0 tmux list-panes-tznc0-F"#{pane_id} #{pane_current_command}"
  2. 等待串口 ready:znc 启动后可能需要几百 ms~几秒才连上。
    你可以 sleep:

    tmux new-session-d-sznc0"python3 -u znc.py die0_uart0 17100"sleep1tmux send-keys...

    或在日志里 grep 到 “connected/ready” 再发命令(更稳)。

  3. 回车键:一般用C-m;有些场景需要C-j(LF),但串口交互大多是C-m

  4. 特殊按键:如 Ctrl-C:

    tmux send-keys-tznc0:0.0 C-c

Python 实现示例

Python 实现:通过 ssh 在远端启动 tmux + znc.py,开启 pipe-pane 落日志;然后轮询 capture-pane 等待出现 login:,自动输入 root,再等待出现提示符 root@riscv64:~#;最后提供 send_cmd() 执行命令并可选等待输出关键字。

依赖:本机能免密 ssh 到 runtime server(或已配置 ssh key),远端已安装 tmux,且能运行 python3 znc.py …

代码实现:

#!/usr/bin/env python3importsubprocessimporttimeimportshlexfromdataclassesimportdataclass@dataclassclassTmuxSerialConfig:ssh_host:str# e.g. "user@10.0.0.1"session:str# e.g. "znc0"pan
http://www.jsqmd.com/news/194522/

相关文章:

  • word将所选内容超链接为文章其他内容
  • C++ 入门导引
  • http通信鉴权(三)基于 Session + CSRF Token 的 Cookie 认证
  • AI Agent太香了!给大模型装上“记忆+规划+手脚“,编程小白也能秒变效率大神!
  • 2026最新多功能清洁剂工厂top5推荐榜,广东广州等地优质公司及批发源头厂家深度解析/选择指南 - 全局中转站
  • playwright工具(二)获取token应用于mcp
  • 计算机毕业设计,基于springboot的房屋租赁管理系统,附源码+数据库+论文,包远程安装调试运行
  • 大模型开发必备!一张图看懂AI Agent!五层架构深度剖析,从Prompt到Action的完整闭环
  • playwright工具(一)自动打开浏览器
  • 【Azure Web App】Github Action部署Jar包到App Service报400错误
  • 杂记 - 状态模式 VS. 责任链模式
  • 【干货】Google最新AI Agent报告出炉:小白程序员也能5分钟上手企业级Agent开发!效率直接翻倍,2026年你的工作将被彻底重构!
  • 托盘目标检测数据集VOC+YOLO格式4517张1类别
  • Windows OLE 零点击远程代码执行漏洞(CVE-2025-21298)技术分析与防护
  • 未来已来!Android Studio的AI Agent让编程变得如此简单,开发者:这比antigravity还牛!小白也能秒变大神,不会你就真的out了!
  • geo优化排名系统---内容式生成搜索引擎逻辑开发
  • 吐血推荐8个AI论文工具,助研究生轻松搞定论文写作!
  • 想高薪!0基础怎么转行做AI,2026挑战三个月转行AI大模型岗,需要多久?
  • 笔记本外接屏突然黑屏?我踩了 3 个坑,最后靠回退 N 卡驱动救了急
  • 英语_阅读_Baduanjing_待读
  • PID控制算法十年演进(2015–2025)
  • AI coding 智能体设计系列-03-路径上下文-如何给材料而不喂爆上下文
  • 零基础也能玩转大模型!5分钟带你从入门到精通AI智能体开发,小白程序员直接起飞!
  • 大模型学习路线图:程序员入门到精通(含300集视频教程+免费资源)_大模型学习路线(2026最新)神仙级大模型教程分享
  • CF1202E You Are Given Some Strings...
  • 2026最新银条饰品生产公司top5推荐,湖南郴州等地优质工厂/供货商解析及选择指南 - 全局中转站
  • 2026最新洗衣片工厂top5推荐榜,广东广州等地优质公司及批发源头厂家深度解析/选择指南 - 全局中转站
  • PyBullet十年演进(2015–2025)
  • 2026最新银饰生产公司top5推荐,湖南郴州等地优质工厂/供货商解析及选择指南 - 全局中转站
  • 基于非对称纳什谈判的多微网电能共享运行优化:MATLAB 实现探秘