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

golang调用模组程序实现交互输入自动化,获取imei及iccid

应用场景:在openwrt下调用移远的测试程序,并实现输入自动话,获取imei

复制代码

root@OpenWrt:~# ql-api-test
Test groups:0:      ql_dsi1:      ql_nw2:      ql_sim3:      ql_dev4:      ql_voice5:      ql_sms6:      ql_adc7:      ql_i2c8:      ql_enit9:      ql_fota10:     ql_gpio11:     ql_spi12:     ql_uart13:     ql_locator14:     ql_lpm15:     ql_audio16:     ql_wifi17:     ql_atcplease input command index(-1 exit):
3
Group Name:ql_dev, Supported test cases:0:      ql_dev_init1:      ql_dev_release2:      ql_dev_get_imei3:      ql_dev_get_firmware_version4:      ql_dev_get_model5:      ql_dev_get_sn6:      ql_dev_set_modem_fun7:      ql_dev_get_modem_fun8:      ql_dev_forbidindplease input cmd index(-1 exit):
0
ql_dev_init ret = 0please input cmd index(-1 exit):
2
ql_dev_get_imei ret = 0, imei:860503070780822;please input cmd index(-1 exit):
-1
Test groups:0:      ql_dsi1:      ql_nw2:      ql_sim3:      ql_dev4:      ql_voice5:      ql_sms6:      ql_adc7:      ql_i2c8:      ql_enit9:      ql_fota10:     ql_gpio11:     ql_spi12:     ql_uart13:     ql_locator14:     ql_lpm15:     ql_audio16:     ql_wifi17:     ql_atcplease input command index(-1 exit):
-1

复制代码

自动化指令:

方式1
echo -e "3\n0\n2\n-1\n-1" | ql-api-test

方式2
ql-api-test <<EOF
3
0
2
-1
-1
EOF

golang代码实现

process.go

复制代码

package utilimport ("bytes""os/exec""regexp""runtime""strings""tboxconfig/util/common"
)// 检查进程是否在运行(适用于类Unix系统和Windows)
func GetIMEI() string {imei := ""if runtime.GOOS == "windows" {return "不支持windows获取MEI"} else {echoCmd := exec.Command("echo", "-e", "3\n0\n2\n-1\n-1")// 创建 ql-api-test 命令qlApiTestCmd := exec.Command("ql-api-test")// 将 echo 命令的输出作为 ql-api-test 命令的输入echoOut, _ := echoCmd.StdoutPipe()qlApiTestCmd.Stdin = echoOut// 捕获 ql-api-test 命令的标准输出var stdout bytes.BufferqlApiTestCmd.Stdout = &stdout// 启动 echo 命令if err := echoCmd.Start(); err != nil {common.LogError2("启动 echo 命令失败:", err)return ""}// 启动 ql-api-test 命令if err := qlApiTestCmd.Start(); err != nil {common.LogError2("启动 ql-api-test 命令失败:", err)return ""}// 等待 echo 命令完成if err := echoCmd.Wait(); err != nil {common.LogError2("echo 命令执行失败:", err)return ""}// 等待 ql-api-test 命令完成if err := qlApiTestCmd.Wait(); err != nil {common.LogError2("ql-api-test 命令执行失败:", err)}// 获取标准输出的内容output := stdout.String()common.LogInfo("imei输出:" + output)// 使用正则表达式提取 imeire := regexp.MustCompile(`imei:([0-9]+);`)matches := re.FindStringSubmatch(output)if len(matches) > 1 {imei = matches[1]}}return imei
}func GetICCID() string {iccid := ""if runtime.GOOS == "windows" {return "不支持windows获取ICCID"} else {cmd := exec.Command("serial_atcmd", "AT+QCCID")// 捕获命令的标准输出和标准错误输出var stdout bytes.Buffervar stderr bytes.Buffercmd.Stdout = &stdoutcmd.Stderr = &stderr// 启动命令if err := cmd.Run(); err != nil {common.LogError2("命令执行失败:", err)return ""}output := stdout.String()common.LogInfo("iccid输出:" + output)// 提取 ICCIDiccid = extractICCID(output)}return iccid
}// 从输出中提取 ICCID
func extractICCID(output string) string {// 假设输出格式为 "+QCCID: 89860012345678901234" 或类似格式lines := strings.Split(output, "\n")for _, line := range lines {if strings.HasPrefix(line, "+QCCID:") {parts := strings.Split(line, ":")if len(parts) > 1 {return strings.TrimSpace(parts[1])}}}return ""
}

复制代码

http://www.lryc.cn/news/486975.html

相关文章:

  • ACE之单例
  • 泷羽sec学习打卡-云技术基础1-docker
  • 7天掌握SQL - 第一天:数据库基础与SQL入门
  • A037-基于Spring Boot的二手物品交易的设计与实现
  • 【异常记录】Junitmock之InvalidUseOfMatchersException异常
  • Spring Boot3自定义starter
  • 掌控 Solidity:事件日志、继承和接口的深度解析
  • 新手教学系列——善用 VSCode 工作区,让开发更高效
  • Vue3 虚拟列表组件库 virtual-list-vue3 的使用
  • WebRTC实现双端音视频聊天(Vue3 + SpringBoot)
  • 第6章详细设计-6.9 PCB审查
  • docker与大模型(口语化原理和实操讲解)
  • Linux之vim模式下全选命令
  • 云原生周刊:Kubernetes v1.32 要来了
  • # JVM学习
  • 【代码随想录day33】【C++复健】62.不同路径;63. 不同路径 II;343. 整数拆分;96.不同的二叉搜索树
  • 《勇者斗恶龙3:HD-2D重制版》找幽灵船攻略分享
  • 基于 MATLAB 的模拟退火算法详解及实现
  • MQTT 服务器常用的有哪些?
  • 【android USB 串口通信助手】stm32 源码demo 单片机与手机通信 Android studio 20241118
  • 汽车资讯新探索:Spring Boot技术引领
  • 简单的MCU与FPGA通过APB总线实现通讯(fpga mcu APB):乘法器为例
  • css uniapp背景图宽度固定高度自适应可以重复
  • 深度学习--优化器
  • 【嵌入式】关于push老仓库到新仓库的方法
  • 从线下到线上,上门洗衣服务如何实现智能化升级?
  • SQL字段来源表的解析
  • 理解 Python 解释器:CPython 与 IPython 的比较及选择指南
  • Java NIO 深度解析:构建高效的 I/O 操作
  • 总结拓展十六:特殊采购业务——VMI采购模式