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实现服务器端执行命令 上传文件 断点续传相关推荐

  1. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv) 一.上传文件 上传一个图片 使用input type="file& ...

  2. ftp linux 推送文件_Linux下SSH用FTP命令上传文件至另一个FTP空间

    如果没有ftp 提示: -bash: ftp: command not found 请先安装ftp应用程序: yum install ftp #ftp 127.0.0.1 21 输入远程空间的FTP ...

  3. xshell文件传输乱码_在Xshell中使用rz命令上传文件出现乱码且文件无法删除的解决办法...

    有些时候,我们在使用rz命令上传文件失败或者不小心输入命令会产生乱码文件名,之后尝试使用rm 删除这些文件,无果:使用rm -rf强制删除,亦无果.是不是很好奇为什么如此强大的rm命令竟然删除不了这些 ...

  4. sftp命令上传本地文件到服务器,使用sftp命令上传文件夹方法

    使用sftp命令上传文件夹方法 发布时间:2020-08-05 02:24:03 来源:ITPUB博客 阅读:138 作者:ouyida3 # 前言 sftp上传单个文件使用put,多个文件可使用mp ...

  5. Linux使用rz命令上传文件乱码

    通过rz命令上传文件,出现乱码的问题,报waiting to receive,两种遇到的情况.一:有可能是上传目录权限的问题:二:有可能是文件中包含一些转移等特殊字符 解决办法: 目录权限问题:使用r ...

  6. springboot调用python脚本_Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法...

    记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...

  7. 向服务器上传文件的命令,上传文件到远程服务器的命令

    上传文件到远程服务器的命令 内容精选 换一换 将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式.本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云 ...

  8. python的requests库发送携带上传文件的接口_python requests 库请求带有文件参数的接口实例...

    python requests 库请求带有文件参数的接口实例 有些接口参数是一个文件格式,比如fiddler 抓包参数如下显示 这个接口的 form-data fiddler 显示的和不带文件参数的接 ...

  9. scp命令上传文件到服务器

    最近在维护客户的服务器,经常需要上传文件到服务器,下载服务器日志到本地,所以总结了SCP命令的使用! 上传本地aa.log文件到服务器目录home下 scp ~/Downloads/aa.log ro ...

最新文章

  1. SecureCRT 连接虚拟机Linux
  2. Android Studio开发基础之启动Service,并通过从Activity向Service传递数据
  3. ondestroy什么时候调用_JavaScript基础——你真的清楚JavaScript是什么吗?
  4. PHP 7.3 比 PHP 7.0 快 22%,即将进入特性冻结阶段
  5. linux 网络io 监控,Linux教程:Linux性能监控-NetworkIO
  6. 详解循环神经网络RNN(理论篇)
  7. 互联网的长在线、心跳和断线重连
  8. LiveReload for mac 软件下载
  9. 软件维护类型的基础知识
  10. 2022“杭电杯”中国大学生算法设计超级联赛(7) 2022杭电多校第七场
  11. BLUES吉他学习笔记001 bluesrv[1-5]
  12. 多选题如何做结构方程模型分析?
  13. VxVM Volume Snapshot Issue -- 卷快照删除失败示例一
  14. fedora 16 安装firefox flash插件
  15. 用python使用py2neo时候报“ModuleNotFoundError:No module named 'py2neo'”的错误
  16. 百度网盘网页端视频倍速方法
  17. Unity 3D + Vuforia制作AR人物互动
  18. iOS—— 调用高德地图SDK
  19. Problem 2128 最长子串(kmp+strstr好题经典)
  20. 思科,华三,H3C命令

热门文章

  1. xcode 选择configuraftions 打包_分利宝IOS自动化打包
  2. case例句java_case的一个用法--case 嵌套
  3. 【全文搜索引擎】Elasticsearch相关介绍与linux系统安装
  4. vscode 中搭建Vue.js
  5. 牛客网 牛客练习赛13 C.幸运数字Ⅲ-思维
  6. 求 1 到 n 的所有数的约数和
  7. Qt探索之路——获取QTextEdit文本内容
  8. [CSS] .class1.class2和.class1 .class2的区别
  9. javascript操作对象的方法
  10. web.config中的session配置详解