#服务端import socketimport osimport subprocessphone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print('进行绑定,监听')phone.bind(('127.0.0.1', 8080))phone.listen(5)

def cmd(cmdlist):    obj=subprocess.Popen(        cmdlist,        shell=True,        stdout=subprocess.PIPE,        stderr=subprocess.PIPE    )

    stdout_res=obj.stdout.read()    stderr_res=obj.stderr.read()

    return stdout_res+stderr_res#假如不写成方法,这里可以分成两次发送过去,更加节省内存

while True:    conn, add = phone.accept()    print('建立连接')

    while True:        try:            msg = conn.recv(1024)            if not len(msg):                break

            print('执行命令')            print(msg)            #os.system(msg.decode(encoding='utf-8'))

            stdout_res=cmd(msg.decode(encoding='utf-8'))            print('发送消息')            conn.send(stdout_res)        except Exception:            break

    conn.close()phone.close()

#客户端
import socket

st = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

st.connect(('127.0.0.1', 8080))while True:    msg=input('请输入cmd 命令').strip()    print('发送消息')    if not len(msg):continue

    st.send(msg.encode(encoding='utf-8'))    data=st.recv(1024)    print(data.decode('gbk'))

st.close()

#服务端
# import socketserver### class Myhandler(socketserver.BaseRequestHandler):#     def Hadler(self):#         print('连接建立成功')#         while True:#             try:#                 data = self.request.recv(1024)#                 if not len(data): break#                 self.request.send(data)##             except ConnectionResetError:#                 break##         self.request.close()### if __name__ == '__main__':#     print('开始启动')#     st = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), Myhandler, bind_and_activate=True)#     print('开始建立连接')#     st.serve_forever()  # 提供无限循环,循环建立链接#     # 每建立链接,就会启动一个线程,专门与刚刚#     # 建立好的链接做通信循环#     # 调用myhandler类产生一个对象,条用该对象下的handler方法,专门与刚刚建立好的#     # 连接做通信循环

import socketserverimport jsonimport structimport subprocessimport os

class MyHandler(socketserver.BaseRequestHandler):    def handle(self):        # 通信循环        while True:            try:                cmd = self.request.recv(1024)                if len(cmd) == 0:                    break                else:                    cmd = cmd.decode(encoding='utf-8')

                if cmd == 'get':                    path = 'file.txt'                    if not os.path.exists(path):                        raise ValueError('没有文件')                    total_size = os.path.getsize(filename=path)                    print(total_size)                    import hashlib                    with open(path, 'rb') as f:                        for line in f:                            line                    hashlib_value = 'xxxx'                else:                    obj = subprocess.Popen(cmd,                                           shell=True,                                           stdout=subprocess.PIPE,                                           stderr=subprocess.PIPE)                    s_out = obj.stdout.read()                    s_err = obj.stderr.read()                    total_size = len(s_out) + len(s_err)                    path = None                    hashlib_value = '你大爷'

                header_dic = {                    'file_name': path,                    'total_size': total_size,                    'hashlib': hashlib_value                }                header_json = (json.dumps(header_dic)).encode(encoding='utf-8')                header_len = struct.pack('i', len(header_json))                print('header_len:%s' % header_len)

                # print(header_len)                self.request.send(header_len)                # print(header_json)                self.request.send(header_json)

                if cmd == 'get':                    with open(path, 'rb') as f:                        for line in f:                            # print(line)                            self.request.send(line)                else:                    # print('cmd')                    self.request.send(s_out)                    self.request.send(s_err)

            except ConnectionResetError:                break

        self.request.close()

if __name__ == "__main__":    s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyHandler, bind_and_activate=True)    s.serve_forever()

#客户端
# from socket import *## socket_client = socket(AF_INET, SOCK_STREAM)# print('进行连接')# socket_client.connect(('127.0.0.1', 8080))# print('连接成功')# while True:#     msg = input('请输入')#     if not len(msg): continue#     socket_client.send(msg.encode(encoding='utf-8'))#     data =socket_client.recv(1024)#     print(data.decode(encoding='utf-8'))## socket_client.close()

import socket, struct, json, hashlib

st = socket.socket(socket.AF_INET, socket.SOCK_STREAM)st.connect(('127.0.0.1', 8080))

def get_file(st):    data = st.recv(4)    print(data)    data = struct.unpack('i', data)[0]    header_json = json.loads((st.recv(data)).decode('utf-8'))    print(header_json)    file_down = b''    encodeing = None    while header_json['total_size'] > 0:        msg = st.recv(1024)        header_json['total_size'] -= len(msg)        file_down += msg        try:            if encodeing == None:                print(msg.decode(encoding='utf-8'))            else:                print(msg.decode(encodeing='gbk'))        except Exception:            encodeing == False            print(msg.decode(encoding='gbk'))

    return file_down

while True:

    msg = input('请输入').strip()    if not len(msg): continue    try:        st.send(msg.encode('utf-8'))        file_down = get_file(st)

        if msg == 'get':            with open('save.txt', 'wb') as f:                f.write(file_down)            print('end')

    except ConnectionResetError:        break

st.close()

python subprocess 小例子的更多相关文章

  1. 感受python之美,python简单易懂的小例子

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 1 简洁之美 通过一行代码,体会Python语言简洁之美 2 Python ...

  2. python闭包小例子

    ------------------ 首先根据实例, 体会一下闭包的效果 ------------------ 定义闭包: def foo(x): a = [0] def bar(y): a[0] = ...

  3. python ctypes小例子

    import time import ctypes import ctypes.wintypes SEE_MASK_NOCLOSEPROCESS = 0x00000040 SEE_MASK_INVOK ...

  4. [Python]Python 函数调用小例子

    函数定义: In [78]: def printme(str): ....: print str ....: return ....: 调用: In [79]: printme('This is Ji ...

  5. [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子

    [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子$ cat customers.txt 1 Ali us 2 Bsb ca 3 Carls mx $ hive h ...

  6. [Python]Python 使用 for 循环的小例子

    [Python]Python 使用 for 循环的小例子: In [7]: for i in range(5): ...: print "xxxx" ...: print &quo ...

  7. [python]python 遍历一个list 的小例子:

    [python]python 遍历一个list 的小例子: mlist=["aaa","bbb","ccc"]for ss in enume ...

  8. Python,while循环小例子--猜拳游戏(三局二胜)

    Python,while循环小例子--猜拳游戏(三局二胜) import random all_choice = ['石头', '剪刀', '布'] prompt = '''(0)石头 (1)剪刀 ( ...

  9. 这42个Python小例子,太走心

    告别枯燥,60秒学会一个Python小例子.奔着此出发点,我在过去1个月,将平时经常使用的代码段换为小例子,分享出来后受到大家的喜欢. 一.基本操作 1 链式比较 i = 3print(1 <  ...

随机推荐

  1. 为tomcat配置项目必须的引擎文件

    1.如下图所示,红框圈出来的四个语音引擎文件是直接放在项目根目录下的,这样的话我们发布web应用的时候,项目并不能自动把这几个文件打包到tomcat中, 除非放到WebRoot文件夹下,但是这样的话项 ...

  2. swift中UIImageView的创建

    let imageView = UIImageView() let imageView1 = UIImageView(frame: CGRectMake(, , , )) // 创建出来的UIImag ...

  3. iOS Dev (25) 解决“The executable was signed with invalid entitlements.”问题

    2014-01-10 10:34 5240人阅读 评论(1) 收藏 举报   目录(?)[+]   iOS Dev (25) 解决“The executable was signed with inv ...

  4. Hide-Music-Player 一个完整的音乐播放器《IT蓝豹》

    Hide-Music-Player 一个完整的音乐播放器 Hide-Music-Player 一个完整的音乐播放器,本例子主要包括几个点 (1)摇一摇进入播放器 (2)下拉展开新视图(扫描音乐) (3 ...

  5. BOS物流项目第十一天

    教学计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 a.  在spring文件中配置开启shiro注解支持 b.  在Action方法上使用注解 3.使用shiro的标签进 ...

  6. vue样式绑定

    vue 绑定class 和style 有相同的地方,可以是数组和对象,对于class class是真实的在css样式中添加的,只不过在元素中添加需要:class这样代表绑定,然后这个class作为对象 ...

  7. php urldecode 与rawdecode

    php urldecode 解码给出的已编码字符串中的任何 %##. 加号('+')被解码成一个空格字符 php rawurldecode 返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都 ...

  8. commit 流程

    COMMIT是一个非常快的操作,当我们发布commit命令时,真正困难的动作已经完成,在数据库中已经执行了数据更改,所以已经完成了99%的任务,例如:下列操作已经产生: 1.在SGA(Buffer C ...

  9. java 1.8

    rpm -qa|grep java (列出本机已安装的java,没有则没空)rpm -e --nodeps 文件名(上一步查到的文件名,一个一个复制过来卸载就好.) 下载java包 https://w ...

  10. Nginx 到底可以做什么

    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流. Nginx能做什么 反向 ...