python socketserver实现服务器端执行命令 上传文件 断点续传
1 基于socketserver在服务器端实现执行cmd命令和上传文件(断点续传) 2 3 #server: 4 5 #!/usr/bin/env python 6 # -*- coding:utf-8 -*- 7 import subprocess 8 import socketserver 9 import os 10 11 BASEDIR = os.path.dirname((os.path.abspath(__file__))) 12 13 class Myserver(socketserver.BaseRequestHandler): 14 15 def handle(self): 16 while True: 17 conn = self.request 18 conn.sendall(bytes('连接成功', encoding='utf8')) 19 while True: 20 cmd_or_load = str(conn.recv(1024), encoding='utf8') 21 if not cmd_or_load:break 22 if cmd_or_load[0:3] == 'cmd': 23 cmd_name, cmd_str = cmd_or_load.split('|') 24 result = subprocess.getoutput(cmd_str) 25 result_lenth = len(result) 26 conn.sendall(bytes(str(result_lenth), encoding='utf8')) 27 conn.recv(1024) #解决粘包 28 conn.sendall(bytes(result, encoding='utf8')) 29 elif cmd_or_load[0:4] == 'load': 30 load_name, file_name, s_path, file_byte_size = cmd_or_load.split('|') 31 file_bytes_size = int(file_byte_size) 32 # file_path = os.path.join(BASEDIR, s_path, file_name) 33 file_path = BASEDIR+s_path+'\\'+file_name 34 35 has_rec = 0 36 37 if os.path.exists(file_path): #2001文件存在 2011 继续上传 2012重新上传 38 conn.sendall(bytes('2001', encoding='utf8')) 39 if str(conn.recv(1024), encoding='utf8') == '2011': 40 has_file_size = os.stat(file_path).st_size 41 has_rec += has_file_size 42 conn.sendall(bytes(str(has_file_size), encoding='utf8')) 43 f = open(file_path, 'ab') 44 elif str(conn.recv(1024)) == '2012': 45 f = open(file_path, 'wb') 46 else: 47 conn.sendall(bytes('2002', encoding='utf8')) 48 f = open(file_path, 'wb') 49 50 data_info = bytes() 51 while has_rec<file_bytes_size: 52 try: 53 data = conn.recv(1024) 54 if not data: 55 raise Exception 56 except Exception: 57 break 58 has_rec += len(data) 59 f.write(data) 60 f.close() 61 print('写入成功') 62 63 64 if __name__ == '__main__': 65 server = socketserver.ThreadingTCPServer(('127.0.0.1', 8009), Myserver) 66 server.serve_forever() 67 #---------------------------------------------------------------- 68 #clinet: 69 70 #!/usr/bin/env python 71 # -*- coding:utf-8 -*- 72 import socket 73 import os 74 75 76 sk = socket.socket() 77 sk.connect(('127.0.0.1', 8009)) 78 79 rec_str = str(sk.recv(1024), encoding='utf8') 80 print(rec_str) 81 82 83 def cmd(): 84 inp = input('请输入命令>>>') 85 comm = 'cmd|' 86 inp_bytes = bytes(comm + inp, encoding='utf8') 87 sk.sendall(inp_bytes) 88 cmd_lenth = int(str(sk.recv(1024), encoding='utf8')) 89 sk.sendall(bytes('1111', encoding='utf8')) # 解决粘包 90 has_recv = 0 91 cmd_info = bytes() 92 while has_recv<cmd_lenth: 93 fetch_info = sk.recv(1024) 94 has_recv += 1024 95 cmd_info += fetch_info 96 cmd_info_str = str(cmd_info ,encoding='utf8') 97 print(cmd_info_str) 98 99 def load(): 100 inp = input('请输入上传文件文件名 服务器保存路径>>>')#input:1.zip|\home 101 loadd = 'load|' 102 file_name = inp.split('|', 1)[0] 103 file_byte_size = os.stat(file_name).st_size 104 file_bytes_size = str(file_byte_size) 105 sk.sendall(bytes(loadd + inp + '|' + file_bytes_size, encoding='utf8')) 106 107 is_or_not = str(sk.recv(1024), encoding='utf8') 108 has_sent = 0 109 110 if is_or_not == '2001': 111 inp = input('文件已存在\n1、继续上传 2、重新上传>>>') 112 if inp == '1': 113 sk.sendall(bytes('2011', encoding='utf8')) 114 has_sent_size = int(str(sk.recv(1024), encoding='utf8')) 115 if has_sent_size == file_byte_size: 116 print('文件已全部发送') 117 else: 118 print('已经发送%d字节'%has_sent_size) 119 has_sent += has_sent_size 120 elif inp == '2': #2001文件存在 2011 继续上传 2012 重新上传 121 sk.sendall(bytes('2012', encoding='utf8')) 122 elif is_or_not == '2002': 123 pass 124 125 f = open(file_name, 'rb') 126 f.seek(has_sent) 127 while has_sent<file_byte_size: 128 data = f.read(1024) 129 sk.sendall(data) 130 has_sent += len(data) 131 print('\r已发送{}字节 共{}字节'.format(has_sent, file_byte_size), end='') 132 f.close() 133 print('\n发送成功') 134 135 136 while True: 137 inp = input('1、执行命令 2、上传文件>>>') 138 if inp == '1': 139 cmd() 140 elif inp == '2': 141 load()
转载于:https://www.cnblogs.com/minchen/p/8003755.html
python socketserver实现服务器端执行命令 上传文件 断点续传相关推荐
- python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)
python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv) 一.上传文件 上传一个图片 使用input type="file& ...
- ftp linux 推送文件_Linux下SSH用FTP命令上传文件至另一个FTP空间
如果没有ftp 提示: -bash: ftp: command not found 请先安装ftp应用程序: yum install ftp #ftp 127.0.0.1 21 输入远程空间的FTP ...
- xshell文件传输乱码_在Xshell中使用rz命令上传文件出现乱码且文件无法删除的解决办法...
有些时候,我们在使用rz命令上传文件失败或者不小心输入命令会产生乱码文件名,之后尝试使用rm 删除这些文件,无果:使用rm -rf强制删除,亦无果.是不是很好奇为什么如此强大的rm命令竟然删除不了这些 ...
- sftp命令上传本地文件到服务器,使用sftp命令上传文件夹方法
使用sftp命令上传文件夹方法 发布时间:2020-08-05 02:24:03 来源:ITPUB博客 阅读:138 作者:ouyida3 # 前言 sftp上传单个文件使用put,多个文件可使用mp ...
- Linux使用rz命令上传文件乱码
通过rz命令上传文件,出现乱码的问题,报waiting to receive,两种遇到的情况.一:有可能是上传目录权限的问题:二:有可能是文件中包含一些转移等特殊字符 解决办法: 目录权限问题:使用r ...
- springboot调用python脚本_Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法...
记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...
- 向服务器上传文件的命令,上传文件到远程服务器的命令
上传文件到远程服务器的命令 内容精选 换一换 将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式.本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云 ...
- python的requests库发送携带上传文件的接口_python requests 库请求带有文件参数的接口实例...
python requests 库请求带有文件参数的接口实例 有些接口参数是一个文件格式,比如fiddler 抓包参数如下显示 这个接口的 form-data fiddler 显示的和不带文件参数的接 ...
- scp命令上传文件到服务器
最近在维护客户的服务器,经常需要上传文件到服务器,下载服务器日志到本地,所以总结了SCP命令的使用! 上传本地aa.log文件到服务器目录home下 scp ~/Downloads/aa.log ro ...
最新文章
- SecureCRT 连接虚拟机Linux
- Android Studio开发基础之启动Service,并通过从Activity向Service传递数据
- ondestroy什么时候调用_JavaScript基础——你真的清楚JavaScript是什么吗?
- PHP 7.3 比 PHP 7.0 快 22%,即将进入特性冻结阶段
- linux 网络io 监控,Linux教程:Linux性能监控-NetworkIO
- 详解循环神经网络RNN(理论篇)
- 互联网的长在线、心跳和断线重连
- LiveReload for mac 软件下载
- 软件维护类型的基础知识
- 2022“杭电杯”中国大学生算法设计超级联赛(7) 2022杭电多校第七场
- BLUES吉他学习笔记001 bluesrv[1-5]
- 多选题如何做结构方程模型分析?
- VxVM Volume Snapshot Issue -- 卷快照删除失败示例一
- fedora 16 安装firefox flash插件
- 用python使用py2neo时候报“ModuleNotFoundError:No module named 'py2neo'”的错误
- 百度网盘网页端视频倍速方法
- Unity 3D + Vuforia制作AR人物互动
- iOS—— 调用高德地图SDK
- Problem 2128 最长子串(kmp+strstr好题经典)
- 思科,华三,H3C命令
热门文章
- xcode 选择configuraftions 打包_分利宝IOS自动化打包
- case例句java_case的一个用法--case 嵌套
- 【全文搜索引擎】Elasticsearch相关介绍与linux系统安装
- vscode 中搭建Vue.js
- 牛客网 牛客练习赛13 C.幸运数字Ⅲ-思维
- 求 1 到 n 的所有数的约数和
- Qt探索之路——获取QTextEdit文本内容
- [CSS] .class1.class2和.class1 .class2的区别
- javascript操作对象的方法
- web.config中的session配置详解