欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > golang调用模组程序实现交互输入自动化,获取imei及iccid

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

2026/5/1 20:58:57 来源:https://blog.csdn.net/arno1988/article/details/143843467  浏览:    关键词: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 ""
}

复制代码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词