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

如何用Python通过串口发送Ctrl+D指令配置Juniper路由器

解决Juniper配置脚本中发送Ctrl+D(^D)的问题

我之前写串口自动化脚本时也碰到过一模一样的问题!Ctrl+D对应的是ASCII里的**End of Transmission (EOT)**字符,它的十进制编码是4,Python里根本不认识\EOT这种转义写法,这就是你代码执行到这里挂起的核心原因。

正确的实现方式

你有两种可靠的方法来发送这个字符:

  • 使用chr(4)生成对应的ASCII字符,直接传给ser.write()
  • 直接发送字节串b'\x04'(串口通信场景下用字节形式通常更稳妥,避免编码问题)

修改后的代码片段

另外我注意到你代码里有个小笔误:ser.write(text + '/r')里的/r应该是\r,这个也一起修正了:

ser.write ('root\r\n')
time.sleep(5)
ser.write ('cli\r\n')
ser.write('configure\r\n')
ser.write('top\r\n')
ser.write('load set terminal\r\n')
file = open('REDACTED', 'r+')
text = file.read()
ser.write(text + '\r')  # 修正了这里的/r为\r
ser.write('\n')
ser.write(chr(4))  # 替换原来的\EOT,用ASCII码4对应的字符
# 或者用字节形式:ser.write(b'\x04')
ser.write('commit and-quit\r\n')

补充说明

当你在终端里按Ctrl+D时,本质就是向设备发送了ASCII码为4的字符,所以直接发送这个编码对应的内容就能正确触发传输结束的指令,不会再出现挂起的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:00