前言: 需求说明:在使用xshell时,发现总是需要注册码,然后提示过期,因为用的是vmware虚拟机,所以对于操作来说,直接在虚拟机上去操作就好了,但是文件无法直接通过vmware进行传输,所以就写了一个数据上传和下载的脚本,如果需要使用,建议不要用pycharm运行,获取数据路径的弹框会报错,直接cmd,在黑框中运行就好了。这个脚本其实可以理解为给centos做了桥接,没有别的功能,就常规的命令运行和文件上行和下载。里边会有需要配置centos的连接配置,没有写成配置文件的方式,所以是直接写死的,写成变量其实也可以,但是没有必要,如果有必要的话,可以自己改一下。代码里边连接centos的方法,没有单独写,因为可能是我只做了操作一台centos的代码,如果需要连接多台centos,可以把连接的方法再单独写出来,降低耦合性。 #输入的文件不可以带. import paramiko from tkinter import filedialog,Tk import re def get_file(): root = Tk() root.withdraw() Fpath = filedialog.askopenfilename() file_name = re.findall('/([^/]*?$)',Fpath) file_path = Fpath.replace(file_name[0],'') return [Fpath,file_path,file_name[0]] def save_file_path(): root = Tk() root.withdraw() Fpath = filedialog.askdirectory() return Fpath def get_connect(args): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #请自行更改连接配置 ssh.connect('ip','port','user','name') if args == 'rz': # filedialog.askopenfilename() file_from = get_file() file_save_path = input('please input save path:\t') sftp_client = paramiko.SFTPClient.from_transport(ssh.get_transport()) sftp_client.put(file_from[0],file_save_path + file_from[2]) print('success') elif args == 'sz': save_file_name = input('please input save path&name:\t') file_to = save_file_path() file_name = re.findall('/[^/]*?$',save_file_name) sftp_client = paramiko.SFTPClient.from_transport(ssh.get_transport()) sftp_client.get(save_file_name,file_to + file_name[0]) print('success') else: stdin,stdout,stderr = ssh.exec_command(args) content = stdout.readlines() print(content) ssh.close() if __name__ == '__main__': while True: args = input('please input your commend:\t') if args == 'exit': break else: get_connect(args)
如果要做常规操作,在这里还是有一些问题存在,就是每一次运行完成后,就会返回到root目录,所以如果需要多个命令配合使用,请用;分隔开就好了。如:
cd /;ls;pwd
这个写完,后续可以去探讨一下如何同时控制多台服务器同时进行工作,执行相同的命令,或者类似于hadoop一样,进行分布式计算。在一台机器上,将多台机器拥有的能力完全释放出来。到时候任务分配算法也会是一个比较难解决的问题。
还有一个需要解决的问题就是在python中,要不要去尝试把抽出来的数据再构造成b-tree结构,然后进行计算或比较等操作。