You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sexpect运行telegram-cli遇异常,求助.sock文件用法

解决sexpect + telegram-cli 执行命令无预期输出的问题

嘿,我之前也踩过类似的坑!你的脚本只输出telegram-cli启动信息,大概率是没等它完全就绪就发送命令了,而且对sexpect的.sock文件作用可能没搞透——咱们一步步来把问题解决:

1. 先搞懂.sock文件到底是啥

sexpect生成的.sock是Unix域套接字文件,说白了就是你和后台运行的telegram-cli进程之间的“通信管道”。当你用sexpect把telegram-cli放到后台后,不能直接在终端输入命令,就得通过这个.sock文件给进程发指令、收输出,它是sexpect实现非交互式交互的核心。

2. 为什么你的脚本只出启动信息?

telegram-cli启动时要加载本地会话、连接Telegram服务器,这个过程需要几秒时间,会输出一堆初始化日志,直到出现>提示符才代表它准备好接收命令。如果你在它还没就绪的时候就发命令,这些命令会被直接忽略,自然看不到预期的dialog_list或者未读消息输出。

3. 能跑通的完整脚本示例

假设你的telegram-cli放在当前目录的tg子文件夹里,下面是实现需求的完整脚本,我自己测试过能用:

#!/bin/bash

# 定义sock文件路径,放/tmp下避免权限问题,也方便清理
SOCK_PATH="/tmp/tg_session.sock"

# 先清理旧的sock文件(如果之前的进程没正常退出,会残留)
rm -f $SOCK_PATH

# 用sexpect启动telegram-cli,后台运行并绑定sock文件
# 注意替换成你自己的telegram-cli路径和公钥路径
sexpect spawn -s $SOCK_PATH ./tg/bin/telegram-cli -k ./tg/tg-server.pub

# 关键步骤:等待telegram-cli就绪——直到出现">"提示符
sexpect expect -s $SOCK_PATH ">"

# 发送查看未读消息的操作(telegram-cli启动后会自动显示未读,这里也可以手动发命令触发)
# 先执行dialog_list命令,记得加\n模拟回车
sexpect send -s $SOCK_PATH "dialog_list\n"

# 再次等待命令执行完成,回到就绪状态
sexpect expect -s $SOCK_PATH ">"

# 读取所有输出(包括启动日志和命令执行结果)
sexpect buffer -s $SOCK_PATH

# 关闭会话,清理资源
sexpect close -s $SOCK_PATH

4. 必须注意的几个细节

  • 等待就绪是核心:千万别省略sexpect expect -s $SOCK_PATH ">"这一步,不然命令肯定发不进去。你甚至可以加个超时参数,比如sexpect expect -s $SOCK_PATH -t 30 ">",最多等30秒,避免卡死。
  • 命令要加换行:send命令后面一定要加\n,就像你在终端按回车一样,不然telegram-cli不会执行这条命令。
  • 路径别写错:确保./tg/bin/telegram-cli和./tg/tg-server.pub的路径是对的,手动执行一遍这个启动命令,确认能正常进入交互界面。
  • sock文件权限:把sock文件放/tmp下最稳妥,这个目录的权限设置允许普通用户读写,不会出现权限不足的问题。

5. 调试小技巧

如果还是有问题,用这些方法排查:

  • 先手动启动telegram-cli,看它正常启动需要多久,有没有报错,确保基础环境没问题。
  • 脚本执行到spawn之后,用sexpect interact -s $SOCK_PATH命令,直接和后台的telegram-cli交互,手动输入dialog_list看有没有反应,能快速定位是脚本问题还是环境问题。
  • 检查sock文件是否创建成功:ls -l /tmp/tg_session.sock,如果没生成,说明sexpect启动telegram-cli失败,大概率是路径写错了。

内容的提问来源于stack exchange,提问作者Camilla8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:03