【RPC】前传

前传

本地程序用的go语言,想把main.go程序当中一些计算工作放到服务器上进行,而只需要把结果给我即可。由于平台上暂时不能运行Go代码,所以写的是python文件。

1、主要是使用ssh依赖进行连接,但是大概率是需要手动添加的,自动添加一直在报错。里面的go.mod也是要重新生成的,主要还是不太熟。
sshl
连接就需要账号密码和地址,配置好之后进行连接。test.py里面只有一个变量a,并且数值是固定的,只是需要输出而已,里面的username和pwd还有Ip是自己的信息。

package mainimport ("fmt""log""net""time""golang.org/x/crypto/ssh"
)// 连接的配置
type ClientConfig struct {Host       string      //ipPort       int64       // 端口Username   string      //用户名Password   string      //密码Client     *ssh.Client //ssh clientLastResult string      //最近一次运行的结果
}func (cliConf *ClientConfig) createClient(host string, port int64, username, password string) {var (client *ssh.Clienterr    error)cliConf.Host = hostcliConf.Port = portcliConf.Username = usernamecliConf.Password = passwordcliConf.Port = port//一般传入四个参数:user,[]ssh.AuthMethod{ssh.Password(password)}, HostKeyCallback,超时时间,config := ssh.ClientConfig{User: cliConf.Username,Auth: []ssh.AuthMethod{ssh.Password(password)},HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {return nil},Timeout: 10 * time.Second,}addr := fmt.Sprintf("%s:%d", cliConf.Host, cliConf.Port)//获取clientif client, err = ssh.Dial("tcp", addr, &config); err != nil {log.Fatalln("error occurred:", err)}cliConf.Client = client
}
func (cliConf *ClientConfig) RunShell(shell string) string {var (session *ssh.Sessionerr     error)//获取session,这个session是用来远程执行操作的if session, err = cliConf.Client.NewSession(); err != nil {log.Fatalln("error occurred:", err)}//执行shellif output, err := session.CombinedOutput(shell); err != nil {log.Fatalln("error occurred:", err)} else {cliConf.LastResult = string(output)}return cliConf.LastResult
}
func main() {cliConf := new(ClientConfig)cliConf.createClient("ip", 22, "username", "pwd")fmt.Println(cliConf.RunShell("cd gotest;python test.py"))
}

服务器里面的代码是放在gotest文件夹里面的,而每一次运行都需要cd gotest,没有办法记录,每次执行一条命令都会创建一条session,而一条session默认只能执行一条命令,并且两条命令不可以分开写。也就是:

fmt.Println(cliConf.RunShell("cd gotest;python test.py"))

这一行代码,不可以写成

cliConf.RunShell("cd gotest")
fmt.Println(cliConf.RunShell("python test.py"))

下图是一个运行结果:
结果
但是我将来肯定需要往里面放数据,所以写test2.py文件:
test2.py
相应的修改main.go文件里面的runshell语句为:

fmt.Println(cliConf.RunShell("cd gotest;python test.py"))

但是没有办法进行输入,且一直会报错
在这里插入图片描述
后面朋友说可以通过命令行写参数,所以把test2.py和main.go里面都进行了修改

fmt.Println(cliConf.RunShell("cd gotest;python test.py 2 3"))

在这里插入图片描述
结果也是可以正确输出的
在这里插入图片描述
但是可以看到仅仅是一个加法,花费的时间是很长的,数据来回的传输是很耗时的。
看到go有内置的RPC,是一个进行远程控制的。

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

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

相关文章

带头+双向+循环链表

前言: 前面我们已经学习了单链表的结构及其功能特点,也了解了单链表在实现一些功能时出现的一些缺点,比如在删除某个节点前面一个节点时就需要再开一个变量来存放前面一个节点的信息,这样就显得不灵活,为了使链表实现功…

网络编程学习笔记

参考: 套接字通信部分 《TCP/IP 网络编程》以及《TCP/IP网络编程》学习笔记 socket 编程 1. 字节序 字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的&…

英国作为留学目的地的传统

引言: 英国作为世界上最受欢迎的留学目的地之一,拥有悠久的历史和丰富的文化传统。本文将探讨英国作为留学目的地的传统,从中我们可以看到英国作为教育中心和学术研究的殿堂的传统,以及其对全球学生的吸引力。 卓越的教育传统&a…

蓝桥杯国一,非ACMer选手保姆级经验分享

目录 一、前言二、蓝桥杯简介三、0基础计算机新手小白,赛前如何准备提高自己的获奖率?3.1 每两周参加一次【蓝桥算法双周赛】3.2 多练真题3.3 参加每一场官方校内模拟赛 四、结语 一、前言 hello,大家好,我是大赛哥(弟)&#xff…

18. 机器学习——集成学习

机器学习面试题汇总与解析——集成学习 本章讲解知识点 什么是集成学习AdaBoost梯度提升树(Gradient Boosting Decision Tree, GBDT)随机森林(Random Forest,简称RF)XGBoostLightGBM本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 本专栏适合于算法工程师、机器…

《Effective C++》知识点(8)--定制new和delete

49. 了解new-handler的行为 49.1 set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用。 49.2 一个设计良好的new-handler函数必须: a. 让更多内存可被使用(程序一开始分配一大块内存)。 b. 安装另一个new-handler。做法之一是令new-h…

1000道精心打磨的计算机考研题,408小伙伴不可错过

提示:408考研人看过来,超精选计算机考研1000题! 文章目录 前言1. 为什么是1000题?2. 有什么优势?【练学结合,助力强化】【难度适中,但不刁钻】【题目新颖,独具匠心】【考题预测&…

Minio

Minio学习 MinioMinio介绍安装window安装1.下载服务端和客户端文件[地址](https://min.io/download#/windows)2.创建minio相关目录3.启动minio服务方式一方式二4.查看minio版本5.访问minio控制台 linux安装docker安装 Minio Minio介绍 MinIO 是在 Apache License v2.0 下发布…

17. 机器学习——SVM

机器学习面试题汇总与解析——SVM 本章讲解知识点 什么是 SVMSVM 的基本原理线性不可分 SVM非线性 SVMSVM 优缺点本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。 本专栏针对面试题答案进行了优化…

云课五分钟的一些想法

起源 自中学起,就积极学习和掌握互联网相关知识,到如今已经快30年了。 个人也全程经历了从信息时代的互联网(硬)到智能时代的大模型(软)。 整体信息到智能的基础设施,由硬到软,机…

安装表面应变计的方法及注意事项

安装表面应变计的方法及注意事项 表面应变计被广泛用于水利工程和混凝土结构中,用于测量埋设点的线性变形(应变)和应力,同时也可以测量温度。它们可以分为表面安装式和埋入式两种。 一、埋入式表面应变计 1、混凝土应变计的安装…

19. 机器学习——朴素贝叶斯

机器学习面试题汇总与解析——朴素贝叶斯 本章讲解知识点 什么是朴素贝叶斯本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份…

蓝桥杯每日一题2023.11.13

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 由于每次吹灭的蜡烛与年龄相同故我们想到使用前缀和可以让我们求出各个区间的和,我们将每个区间都枚举一遍,如果符合要求就输出区间开始的位置(答案&#xff…

程序员的奔溃与欢笑:分享一些编程中的搞笑故事

程序员是一群勤奋、智慧、创造力的人,他们用代码构建了我们日常使用的各种软件、应用、网站和游戏。但是,程序员的工作并不总是一帆风顺,有时候他们也会遇到一些让人奔溃的情况,比如隐藏的错误、复杂的bug、意外的结果等等。这些情…

精通Nginx(11)-缓存

缓存能够存储请求的响应结果,以供未来再次使用,进而加速内容的提供。内容缓存可以缓存完整的响应,减少上游服务器的负载,避免了每次都为相同的请求重新运行计算和查询的麻烦。缓存可以提高性能并减少负载,这意味着可以用更少的资源更快地提供服务。NGINX 允许在NGINX 服务…

C语言—i++、++i、条件运算符、goto语句、注释

i和i #include <stdio.h> int main() {int i5,j;j i;printf("i%d,j%d\n", i, j);i 5;j i;printf("i%d,j%d\n", i, j);system("pause");return 0;}i6,j6 i6,j5 请按任意键继续. . .条件运算符 goto语句 #include <stdio.h> int …

Ansible自动化部署工具-role模式安装filebeat实际案例分析

大家好&#xff0c;我是蓝胖子&#xff0c;前面一节我简单的讲了讲Ansible的架构和编排任务的语法&#xff0c;可以发现&#xff0c;通过playbook方式编排任务时&#xff0c;能够将任务文档化&#xff0c;但是在面对比较复杂且不同业务的任务编排时&#xff0c;维护playbook就变…

SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对这篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;SpringIOC和DI的代码实现&#xff0c;Spring如何存取对象&#xff1f;Controller、Service、Repository、Component、Configuration、Bean DI详…

若依框架下载文件

若依下载的逻辑是指定文件存储的路径&#xff0c;在ruoyi-admin模块下的application.yml中配置路径结尾必须要加/或者\结尾。 他使用的是虚拟路径映射&#xff0c;所以文件名必须是配置路径下真实的文件名。 若依采用的是流的方式&#xff0c;前端必须要用bolb的方式去接收&am…

怎么在uni-app中使用Vuex 简单demo,通俗易懂(第二篇)

Vuex是Vue.js的官方状态管理库&#xff0c;可以帮助我们更好地管理和维护复杂状态和数据共享。在Vuex中&#xff0c;整个应用的状态被集中到一个单一的状态树中&#xff0c;这个状态树包含了所有的共享状态和数据。通过状态管理模块、getter、mutation、action等机制&#xff0…