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…...
AI 模型精度与性能的权衡
AI模型精度与性能的权衡:寻找最佳平衡点 在人工智能领域,模型的精度与性能往往是一对矛盾体。精度代表模型预测的准确性,而性能则涉及计算速度、资源占用和实时性等指标。开发者常常需要在两者之间做出权衡,以满足不同场景的需求…...
DataGrip安装使用全攻略 (DataGrip更改新建查询存储默认位置)
一、DataGrip安装 下载 DataGrip 安装包 访问 DataGrip 官网:https://www.jetbrains.com/datagrip/download ,下载 DataGrip 2025.3.5 版本的安装包: 我这里也有安装包 链接: https://pan.baidu.com/s/1g5aiHWsv9VyIhFD-7TBdEg?pwd=0908 提取码: 0908 --来自百度网盘超…...
nli-distilroberta-base实际作品:NLI服务返回JSON结构+置信度+可解释注意力图
NLI DistilRoBERTa Base实际作品:NLI服务返回JSON结构置信度可解释注意力图 1. 项目概述 基于DistilRoBERTa的自然语言推理(NLI)Web服务,能够智能分析两个句子之间的逻辑关系。这项技术可以广泛应用于问答系统、内容审核、智能客服等场景,帮…...
MangoHud源码静态分析报告:潜在问题列表
MangoHud源码静态分析报告:潜在问题列表 【免费下载链接】MangoHud A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more. Discord: https://discordapp.com/invite/Gj5YmBb 项目地址: https://gitcode.com/gh_mirrors/ma/Mang…...
STEP3-VL-10B性能评测:10B参数模型在A100上吞吐量达18.7 token/s实测
STEP3-VL-10B性能评测:10B参数模型在A100上吞吐量达18.7 token/s实测 最近,阶跃星辰开源了一个让我眼前一亮的模型——STEP3-VL-10B。作为一个10B参数级别的多模态视觉语言模型,它的表现确实让人惊喜。我在A100上实测后发现,它的…...
Python张量框架选型避坑清单:87个真实项目踩坑案例汇总(含ONNX兼容性断裂、梯度检查点失效、分布式checkpoint跨框架不一致等3类高危风险)
第一章:Python张量框架选型的底层逻辑与决策模型选择Python张量框架并非仅由“流行度”或“上手快慢”驱动,而是需穿透API表层,审视其内存布局、计算图构建机制、设备抽象粒度与编译优化能力等底层要素。不同框架在张量生命周期管理上存在本质…...
别再乱调Filter Mode了!深度解析Unity纹理的Point、Bilinear和Trilinear到底怎么选
纹理过滤模式实战指南:如何为Unity项目选择最佳视觉方案 当你在Unity编辑器中导入一张纹理时,Filter Mode这个下拉菜单可能经常被忽视——毕竟默认的Bilinear看起来"能用"。但当你真正对比过Point、Bilinear和Trilinear三种模式在游戏中的实际…...
WVP-GB28181-Pro:构建统一视频监控平台的技术指南
WVP-GB28181-Pro:构建统一视频监控平台的技术指南 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 在安防监控领域,企业和机构常常面临多品牌设备协议不兼容、系统扩展困难、运维成本高昂等…...
网络安全专业的就业前景到底如何?给大家来分析一波
网络安全专业就业前景怎么样? 网络的安全是指通过采用各种技术和管理措施,使网络系统正常运行,从而确保网络数据的可用性、完整性和保密性。网络安全的具体含义会随着“角度”的变化而变化。比如:从用户(个人、企业等…...
Polars 2.0清洗效能天花板在哪?我们用金融/电商/物联网三大行业真实数据集压力测试后,终于敢说这句话
第一章:Polars 2.0清洗效能天花板在哪?我们用金融/电商/物联网三大行业真实数据集压力测试后,终于敢说这句话为精准定位 Polars 2.0 在真实业务场景下的清洗性能边界,我们构建了三类高保真数据集:金融领域(…...
