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

Linux下如何通过Python脚本向Telnet进程模拟按键(如向上箭头)

解决Telnet会话中通过FIFO发送特殊按键的问题

问题根源

你当前用FIFO给Telnet发命令的方式,只能传递普通字符串,但向上箭头这类特殊按键对应的是ANSI终端转义序列(比如向上箭头是\x1b[A),而非普通文本。另外,pyautogui和xdotool是模拟X11窗口的按键输入,它们的目标是当前活动终端窗口,而你的Telnet进程标准输入绑定到了FIFO,所以这两个工具的输入无法传递到Telnet进程。

可行解决方法

1. 直接向FIFO发送转义序列

Telnet接收的是原始字节流,你可以直接把特殊按键对应的转义序列写入FIFO:

  • 用bash命令发送:
printf "\x1b[A" > my.fifo
  • Python脚本中发送(注意用二进制模式写入,避免编码转换):
with open('my.fifo', 'wb') as fifo:
    # 向上箭头的转义序列
    fifo.write(b'\x1b[A')
    # 如果需要触发执行,加上回车
    fifo.write(b'\r')

2. 使用expect工具控制交互式会话

expect是专门处理交互式命令行程序的工具,比FIFO更可靠,能直接管理Telnet的输入输出:
创建一个telnet_control.exp脚本:

#!/usr/bin/expect
# 启动Telnet会话
spawn telnet 182.23.45.12 10000
# 把输出记录到log.txt
log_file -a log.txt

# 发送普通命令
send "your_command_here\r"
# 发送向上箭头
send "\x1b[A\r"

# 等待会话结束,或者根据需要添加expect匹配逻辑
expect eof

给脚本加执行权限后运行:

chmod +x telnet_control.exp
./telnet_control.exp

3. 用script创建伪终端环境

原来的FIFO管道没有模拟真实终端(pty),Telnet可能会忽略转义序列。用script创建伪终端后再运行Telnet,就能正常处理特殊按键:

mkfifo my.fifo
# -q 静默模式,-c 指定要运行的命令,输出直接写入log.txt
script -q -c "telnet 182.23.45.12 10000" log.txt < my.fifo &

之后再用printf发送转义序列到FIFO,就能被Telnet正确识别:

printf "\x1b[A\r" > my.fifo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:11