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 ""
}
![]()
相关文章:
golang调用模组程序实现交互输入自动化,获取imei及iccid
应用场景:在openwrt下调用移远的测试程序,并实现输入自动话,获取imei rootOpenWrt:~# ql-api-test Test groups:0: ql_dsi1: ql_nw2: ql_sim3: ql_dev4: ql_voice5: ql_sms6: ql_adc7: ql_i2c8: …...
ACE之单例
单例簇 使用双重锁检查优化 #mermaid-svg-RMOXQ0KMo0VnJe7V {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-RMOXQ0KMo0VnJe7V .error-icon{fill:#552222;}#mermaid-svg-RMOXQ0KMo0VnJe7V .error-text{fill:#552222…...
泷羽sec学习打卡-云技术基础1-docker
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于云技术基础的那些事儿-Base1 一、云技术基础什么是云架构?什么是云服务?什么…...
7天掌握SQL - 第一天:数据库基础与SQL入门
目标 在本章节中,我们将学习数据库的基本概念和SQL语言的基础操作,为后续的深入学习打下坚实的基础。 一级目录 数据库基本概念SQL语言基础SQL操作实践推荐资源总结 1. 数据库基本概念 1.1 表(Table) 表是数据库中存储数据的…...
A037-基于Spring Boot的二手物品交易的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
【异常记录】Junitmock之InvalidUseOfMatchersException异常
mock之InvalidUseOfMatchersException异常 新手小白对mock一知半解,就开始自测了,被这个InvalidUseOfMatchersException困扰了一晚上。排查了好久,大多数文章都把英文翻译了一遍,但自检无问题。最后发现是,注入的时候…...
Spring Boot3自定义starter
1、加入必要依赖 plugins {id javaid org.springframework.boot version 3.2.6id io.spring.dependency-management version 1.1.5 } group org.example.test.starter version 1.1.0jar{enabledtrue// resolveMainClassName }java {toolchain {languageVersion JavaLanguage…...
掌控 Solidity:事件日志、继承和接口的深度解析
Solidity 是以太坊智能合约的主要编程语言,它的强大之处在于能够帮助开发者构建安全、高效的去中心化应用。在我参与的多个项目中,事件日志、继承和接口这三个概念始终贯穿其中,成为构建复杂智能合约的关键技术。今天就来聊聊Solidity中的错误…...
新手教学系列——善用 VSCode 工作区,让开发更高效
引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…...
Vue3 虚拟列表组件库 virtual-list-vue3 的使用
Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库,欢迎各位来进行使用与给予一些更好的建议😊 概述:该组件组件库用于提供虚拟化列表能力的组件,用于解决展示大量数据渲染时首屏渲…...
WebRTC实现双端音视频聊天(Vue3 + SpringBoot)
目录 概述 相关概念 双端连接整体实现步骤概述 文章代码实现注意点 STUN和TURN服务器的搭建 开发过程描述 后端开发流程 前端开发流程 效果演示 Gitee源码地址 概述 文章描述使用WebRTC技术实现一对一音视频通话。 由于设备摄像头限制(一台电脑作测试无法…...
第6章详细设计-6.9 PCB审查
6.9 PCB审查 6.9.1 布局阶段注意事项1.结构设计要求在PCB布局之前弄清楚产品的结构2.布局要求 6.9.2 布线注意事项6.9.3 接地处理(1)射频链路接地。(2)腔壳接地孔。(3)螺钉放置(需要了解结构知识…...
docker与大模型(口语化原理和实操讲解)
文章目录 一、镜像images1)下载安装2)docker images相关命令(保存、删除、上传、别名、搜索镜像) 二、容器container1)展现所有在跑的容器服务ps2)start /restart / kill / stop /rm3)exec /cp4)run/create…...
Linux之vim模式下全选命令
在Linux系统中,使用Vim编辑器进行全选操作可以通过以下几种方式实现: 1.使用键盘快捷键 按下 ”ggVG”(先按下”g”,再按下”g”,再按下”V”,最后按下”G”)可以全选当前文件内容。其中 ”g…...
云原生周刊:Kubernetes v1.32 要来了
开源项目推荐 Woodpecker Woodpecker 是一款轻量级且功能强大的 CI/CD 引擎,以其高度可扩展性和易用性著称。它支持多种版本控制系统与编程语言,能够灵活适配不同开发流程,帮助团队实现高效的持续集成与交付。无论是个人项目还是大型团队&a…...
# JVM学习
JVM JVM是什么? Java虚拟机(JVM) 是一个抽象的计算机,它是一个运行时环境,用于执行Java字节码或编译后的Java程序。JVM屏蔽了底层操作系统的差异,使得Java程序可以在任何支持JVM的操作系统上运行。 JVM能…...
【代码随想录day33】【C++复健】62.不同路径;63. 不同路径 II;343. 整数拆分;96.不同的二叉搜索树
感觉dp的题真的很适合背,当然不是死记硬背,而是当做一种模板题,出来一道新的题就往模板题上面去靠,如果套对模板的话剩下的事情其实就简单了。所以只要看一遍解法知道大致思路其实就够了,毕竟大部分dp的代码也不算难写…...
《勇者斗恶龙3:HD-2D重制版》找幽灵船攻略分享
《勇者斗恶龙3:HD-2D重制版》中的幽灵船是游戏里非常独特的一个区域,而想要找到幽灵船的话还是比较麻烦的,首先是听到关于幽灵船在世界海域上航行的传闻,包括在海盗巢穴中,但幽灵船的出现有一些具体条件。 勇者斗恶龙3…...
基于 MATLAB 的模拟退火算法详解及实现
以下是一篇更详细的关于 模拟退火算法 (Simulated Annealing) 的 MATLAB 实现的教程和代码示例,涵盖基本概念、核心思想和代码实现。 一、模拟退火算法简介 模拟退火算法(Simulated Annealing,简称 SA)是一种随机优化算法&#x…...
MQTT 服务器常用的有哪些?
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,常用于物联网(IoT)设备之间的通信。以下是一些常用的 MQTT 服务器(也称为 MQTT Broker): 1.Eclipse Mosqui…...
SoC硅验证挑战与ClearBlue解决方案解析
1. SoC硅验证与调试的挑战与ClearBlue解决方案在复杂SoC芯片的开发周期中,硅验证阶段往往是最耗时、成本最高且最难预测的环节。当第一颗芯片从晶圆厂返回时,设计团队面临的核心挑战是:如何在真实工作环境和全速运行条件下,快速验…...
AzurLaneAutoScript:碧蓝航线终极自动化解决方案
AzurLaneAutoScript:碧蓝航线终极自动化解决方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧蓝航线…...
问卷设计对比实测:手工瞎编≠通用 AI≠学术专用!虎贲等考 AI 重新定义可发表级问卷
在毕业论文、课程论文、期刊实证研究中,问卷是决定数据是否有效、模型能否跑通、论文能否过关的核心一环。但 90% 的学生都在用错误方式做问卷:手工凭感觉出题、网上随便抄量表、用通用 AI 随意生成…… 结果要么信效度不达标,要么数据无法分…...
工作5年的Go程序员,转大模型开发3个月,我踩过的所有坑
文章目录前言一、第一个大坑:以为大模型就是调API,结果连面试门都没入二、第二个大坑:技术栈转换,从Go的天堂掉进Python的地狱三、第三个大坑:Go调用大模型推理,踩不完的性能和内存坑四、第四个大坑&#x…...
2026-05-11 全国各地响应最快的 BT Tracker 服务器(联通版)
数据来源:https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1udp://60.172.236.18:6969/announce安徽芜湖联通102udp://118.196.100.63:6969/announce安徽芜湖联通113http://211.75.205.187:6969/announce安徽芜湖联通384http://211.75.205.188:80/announ…...
Win10台式机没蓝牙?手把手教你用USB适配器搞定BLE设备通信(附驱动避坑指南)
Win10台式机蓝牙适配器实战指南:从硬件选型到BLE通信全解析 当台式机遇到蓝牙设备通信需求时,许多开发者首先面临的不是代码问题,而是硬件基础建设。本文将带你系统解决从零搭建蓝牙开发环境的完整流程,特别针对低功耗蓝牙&#x…...
CV前沿论文实战解码:轻量化与多模态对齐的工程落地指南
1. 这不是“论文速递”,而是一份面向实战者的CV研究动态解码指南你点开这个标题,大概率不是为了收藏一份PDF列表,而是想快速判断:这篇新出的视觉论文,值不值得我花三小时精读?它背后的技术思路,…...
HealthGPT高级功能:语音交互与聊天记录导出的实用技巧
HealthGPT高级功能:语音交互与聊天记录导出的实用技巧 【免费下载链接】HealthGPT Query your Apple Health data with natural language 💬 🩺 项目地址: https://gitcode.com/gh_mirrors/he/HealthGPT HealthGPT是一款能让你用自然语…...
潜变量模型完全指南:从高斯混合模型到变分自编码器
潜变量模型完全指南:从高斯混合模型到变分自编码器 【免费下载链接】bayesian-machine-learning Notebooks about Bayesian methods for machine learning 项目地址: https://gitcode.com/gh_mirrors/ba/bayesian-machine-learning 潜变量模型是机器学习领域…...
惠普开发了一架3D打印无人机,超轻、超快组装、成功试飞!
3D打印技术参考注意到,惠普于日前自行开发了一架基于增材制造设计的结构优化无人机,来展示使用其MJF技术进行3D打印制造的巨大潜力。它的核心观点是,无人机开发与制造的一个重大挑战,是团队花了几个月时间进行的优化设计ÿ…...
