Golang实现一个批量自动化执行树莓派指令的软件(6)简易批量指令处理

简介

基于上篇 Golang实现一个批量自动化执行树莓派指令的软件(5)模块整合, 这里我们实现简单的从配置文件设置指令集, 然后程序自动运行指令集的操作。

环境描述

运行环境: Windows, 基于Golang, 暂时没有使用什么不可跨平台接口, 理论上支持Linux/MacOS
目标终端:树莓派DebianOS(主要做用它测试)

实现

package controllerimport ("encoding/json""fmt""os""ssh_remote_access/app""ssh_remote_access/models""ssh_remote_access/sshutil""ssh_remote_access/utils""sync""time"
)type JobController struct {settings models.Settingssshutil  *sshutil.SSHUtil
}func NewJobController(decryptionKey string, cfgPath string) (*JobController, error) {var (controller   = &JobController{}err          errorencrypt      *utils.EncryptionrealPassword string)/* 加载文件 */if err = controller.loadConfig(cfgPath); nil != err {return nil, err}/* 组合配置信息 */encrypt = utils.NewEncryption(decryptionKey)if realPassword, err = encrypt.Decrypt(controller.settings.User.Password); nil != err {return nil, err}controller.sshutil, err = sshutil.NewSSHUtil(sshutil.SSHConfig{IP:       controller.settings.Network.IP,Port:     controller.settings.Network.Port,Timeout:  controller.settings.Network.Timeout,User:     controller.settings.User.Name,Password: realPassword,})return controller, err
}func RunJobList() error {var (controller *JobControllererr        error)/* 初始化任务列表 */controller, err = NewJobController(app.ASE_KEY, app.CONFIG_PATH)if nil != err {fmt.Println("run job list fail, ", err.Error())return err}defer controller.Destroy()/* 执行任务 */err = controller.RunJobs(func(currFinishedJob models.SSHJob, jobNum, fnishedNum uint) error {fmt.Printf("job_type: %d, total job: %d, finished job: %d.\n", currFinishedJob.Type, jobNum, fnishedNum)return nil})return err
}func (j *JobController) Destroy() error {return j.sshutil.Destroy()
}func (j *JobController) loadConfig(filepath string) error {var bs, err = os.ReadFile(filepath)if nil != err {return err}err = json.Unmarshal(bs, &j.settings)return err
}func (j *JobController) RunJobs(processCallback func(currFinishedJob models.SSHJob, jobNum, fnishedNum uint) error) error {var (waiter sync.WaitGrouperr    error)for i, job := range j.settings.JobList {waiter.Add(1)time.Sleep(time.Duration(job.BeforeSleep) * time.Millisecond)switch models.SSH_TYPE(job.Type) {case models.SSH_COMMAND:_, err = j.sshutil.Commander().Command(job.Command)if nil != err {return err}case models.SSH_UPLOAD:err = j.sshutil.SFTFClient().UploadWithCallback(job.From, job.To, func(from, to string, num, uploaded uint) {fmt.Println("upload from ", from, " to ", to, ", total_num ", num, " upload_num ", uploaded)}, func(err error) {fmt.Println("upload finished")}, false)if nil != err {return err}case models.SSH_DOWNLOAD:err = j.sshutil.SFTFClient().DownloadWithCallback(job.From, job.To, func(from, to string, num, downloaded uint) {fmt.Println("download from ", from, " to ", to, ", total_num ", num, " download_num ", downloaded)}, func(err error) {fmt.Println("download finished")}, false)if nil != err {return err}}time.Sleep(time.Duration(job.AfterSleep) * time.Millisecond)if err = processCallback(job, uint(len(j.settings.JobList)), uint(i+1)); nil != err {}}return err
}

测试用例

代码源

https://gitee.com/grayhsu/ssh_remote_access

视频

Golang实现远程ssh访问-简单批量化指令示例

其他

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

找不到mfc140.dll如何解决?mfc140.dll丢失的几种解决方法分享

在我们启动并开始利用电脑进行日常工作的过程中,如果遭遇了操作系统提示“mfc140.dll文件丢失”的错误信息,导致某些应用程序无法正常运行,这究竟是何种情况呢?小编将介绍计算机缺失mfc140.dll文件的5种解决方法,帮助大…

java项目:微信小程序基于SSM框架实现的购物系统小程序【源码+数据库+毕业论文+PPT】

一、项目简介 本项目是一套基于SSM框架实现的购物系统小程序 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐…

MATLAB初学者入门(17)—— 爬山算法

爬山算法是一种局部搜索算法,它采用贪心策略来迭代改进问题的解决方案,直到达到局部最优。爬山算法在解决一些优化问题时很有用,尤其是当问题的解空间是离散的,并且我们可以容易地定义“邻居”概念时。 案例分析:使用…

unity学习(91)——云服务器调试——补充catch和if判断

本机局域网没问题,服务器放入云服务器后,会出现异常。 想要找到上面的问题,最简单的方法就是在云服务器上下载一个vs2022! 应该不是大小端的问题! 修改一下readMessage的内容,可以直接粘贴到云服务器的。 …

使用FunASR处理语音识别

FunASR是阿里的一个语音识别工具,比SpeechRecognition功能多安装也很简单; 官方介绍:FunASR是一个基础语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端点检测(VAD&#xff…

DAC音频解码芯片DP7398立体声数模转换芯片

DP7398 Pin TO Pin CS4398和CS43122,同轴光纤DAC解码,支持HIFI播放器。 产品介绍 DP7398 是一个立体声 24 位/1 92kHz 数模转换芯片。 该 D/A 系统包括数字去加重、半分贝步长音量控制、 ATAP I 通道混频、可选择的快速和慢速数字插补滤波器和过采样多位…

使用TensorFlow 2.x实现深度学习模型的完整指南

TensorFlow 2.x 是一个强大的开源软件库,用于数据流编程,广泛应用于各种机器学习和深度学习模型的开发。这里将提供一个使用 TensorFlow 2.x 实现深度学习模型的基本步骤,包括环境设置、模型构建、训练和评估。 ### 步骤 1: 安装 TensorFlow…

AI辅助编码体验

自从自己架设了ai玩了一个月以后,感觉好哇塞 在线的文心一言很棒棒 前几天Llama3出来了,因为不翻墙所以等这两天大家搬家我就把Llama3-8B-Chinese-Chat模型给用上了,简单一试感觉比microsoft_phi-2(好像是7B,大了我这…

【Java数据结构】初步认识ArrayList与顺序表

前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&#x…

分布式文件系统--MinIO

1 MinIO安装(Docker) ●在root目录下新建docker_minio文件夹 ●在docker_minio文件夹下新建config文件夹,data文件夹 ●在root目录下新建docker_compose文件夹,在docker_compose文件夹中添加docker-compose.yaml services:minio:image: quay.io/minio/miniocontainer_name: mi…

Vuforia AR篇(三)— AR模型出场效果

目录 前言一、AR模型出场二、AR出场特效三、添加过渡效果四、效果 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 一、AR模型出场 创建ARCamer…

vscode中对 python 快速增加header 描述

在首选项→配置用户代码片段→python 然后再 Code/User/snippets/python.json文件中写入 {// Place your snippets for python here. Each snippet is defined under a snippet name and has a prefix, body and // description. The prefix is what is used to trigger the …

web server apache tomcat11-20-connectors 连接器

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

Three.js——基础材质、深度材质、法向材质、面材质、朗伯材质、Phong材质、着色器材质、直线和虚线、联合材质

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

【树莓派】强力烧写工具 Balena Etcher,烧写树莓派系统,树莓派系统克隆,备份

文章目录 使用Win32DiskImager备份和写入树莓派系统步骤一:下载和安装Win32DiskImager步骤二:准备工作步骤三:备份树莓派系统步骤四:写入树莓派系统 使用Balena Etcher给树莓派烧写系统Balena Etcher简介步骤一:下载Ba…

景区文旅实景剧本杀小程序系统开发搭建

开发景区文旅实景剧本杀小程序系统需要以下步骤: 1. 确定需求和功能:根据景区文旅实景剧本杀的特点和需求,确定系统需要具备的功能,如实景探索、剧情互动、角色扮演、任务挑战等。 2. 设计系统架构:根据需求和功能&a…

Mac安装telnet

一、安装Homebrew 1、打开官网:Homebrew — The Missing Package Manager for macOS (or Linux) 2、打开终端输入: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装Telnet bre…

【LAMMPS学习】八、基础知识(4.5)TIP5P水模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

C#鼠标拖拽无边框浮动窗体的方法:窗体控制

目录 (1)ReleaseCapture函数 (2)SendMessage函数 (3)实例 1.Resources.Designer.cs 2.Form1.Designer.cs 3.Form1.cs 一般情况下,在标题栏中按住鼠标左键不放即可实现拖动操作。 当做浮动窗体时,如果包含窗体边框,那么界面给使用者的感…

目标检测的迁移学习

目标检测的迁移学习是指利用已经在一个数据集上预训练好的目标检测模型,在另一个相关但不同的数据集上进行微调或者直接应用,以提升目标检测任务的性能。这种方法通常可以加快新数据集上的训练速度,并且可以在少量标注数据的情况下实现较好的…