千家信息网

补充subprocess模块和粘包现象及解决办法是什么

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这期内容当中小编将会给大家带来有关补充subprocess模块和粘包现象及解决办法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。远程执行命令,补充subpro
千家信息网最后更新 2025年02月07日补充subprocess模块和粘包现象及解决办法是什么

这期内容当中小编将会给大家带来有关补充subprocess模块和粘包现象及解决办法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

  远程执行命令,补充subprocess模块,粘包现象及解决办法

  1.subprocess模块

  shell参数:

  如果把shell设置成True,指定的命令会在shell里解释执行。

  subprocess.PIPE

  一个可以被用于Popen的stdin 、stdout 和stderr 3个参数的特输值,表示需要创建一个新的管道。

  例:

  #author: wylkjj

  #date:2019/4/18

  import subprocess

  # b=subprocess.Popen('dir',shell=True)

  # print(b)

  #stdout=subprocess.PIPE把子进程封装到a里面去了

  a=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)

  # print(a)#多进程,子进程,父进程同时进行,谁快谁先打印

  print(str(a.stdout.read(),'gbk'))#把执行结果从子进程里面取出来

  2.远程执行命令

  #author: wylkjj

  #date:2019/4/18

  #服务端

  import subprocess

  import socket

  sk=socket.socket()

  address=('127.0.0.1',8000)

  sk.bind(address)

  sk.listen(2)

  print('waiting')

  while 1:

  conn,addr=sk.accept()

  print(addr)

  while 1:

  data=conn.recv(4024)

  print('......'+str(data, 'utf8'))

  if not data:break

  obj = subprocess.Popen(str(data,'utf8'), shell=True, stdout=subprocess.PIPE)

  cmd_result = obj.stdout.read()

  # 获取发送数据的大小 为int类型,int类型无法与bytes类型相互转换,所以int要先转换成str然后再转换为bytes类型

  result_len=bytes(str(len(cmd_result)),'utf8')

  conn.sendall(result_len)

  conn.send(cmd_result)

  sk.close()

  #author: wylkjj

  #date:2019/4/18

  #客户端

  import subprocess

  import socket

  sk=socket.socket()

  address=('127.0.0.1',8000)

  sk.connect(address)

  while True:

  inp = input('>>>')

  if inp=='exit':

  break

  sk.send(bytes(inp,'utf8'))

  result_len=int(str(sk.recv(1024),'utf8'))

  print(result_len)

  # 接收数据,是bytes类型,数据量超过8k就不会接收,所以可以设置多次接收

  data = bytes()

  while len(data) != result_len: #判断data的长度是否与server端传来的长度相符

  recv = sk.recv(1024)

  data += recv

  print(str(data,'gbk'))

  sk.close()

  3.粘包现象及解决办法

  #author: wylkjj

  #date:2019/4/18

  #服务端

  import subprocess

  import socket

  sk=socket.socket()

  address=('127.0.0.1',8000)

  sk.bind(address)

  sk.listen(2)

  print('waiting')

  while 1:

  conn,addr=sk.accept()

  print(addr)

  while 1:

  data=conn.recv(4024)

  print('......'+str(data, 'utf8'))

  if not data:break郑州人流价格 http://www.zzzykdfk.com/

  obj = subprocess.Popen(str(data,'utf8'), shell=True, stdout=subprocess.PIPE)

  cmd_result = obj.stdout.read()

  # 获取发送数据的大小 为int类型,int类型无法与bytes类型相互转换,所以int要先转换成str然后再转换为bytes类型

  result_len=bytes(str(len(cmd_result)),'utf8')

  conn.sendall(result_len)

  conn.recv(1024) #因为两个sand连一起发送会出现粘包现象,所以recv一下(利用recv的阻塞原理)

  conn.send(cmd_result)

  sk.close()

  #author: wylkjj

  #date:2019/4/18

  #客户端

  import subprocess

  import socket

  sk=socket.socket()

  address=('127.0.0.1',8000)

  sk.connect(address)

  while True:

  inp = input('>>>')

  if inp=='exit':

  break

  sk.send(bytes(inp,'utf8'))

  result_len=int(str(sk.recv(1024),'utf8'))

  sk.sendall("ok")

  print(result_len)

  # 接收数据,是bytes类型,数据量超过8k就不会接收,所以可以设置多次接收

  data = bytes()

  while len(data) != result_len: #判断data的长度是否与server端传来的长度相符

  recv = sk.recv(1024)

  data += recv

  print(str(data,'gbk'))

  sk.close()

上述就是小编为大家分享的补充subprocess模块和粘包现象及解决办法是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

类型 数据 现象 进程 办法 模块 长度 命令 内容 参数 大小 客户 客户端 分析 服务 专业 两个 中小 人流 价格 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 关系数据库设计技术与实践教程 出一道数据库的题目 驱动开发转网络安全 江苏皮游网络技术有限公司 考研复试数据库原理及结构 服务佳的软件开发外包 云服务器怎么在同一局域网内 高中数据库教学视频教程 苹果怎么升级网络安全性 我国蜂窝移动网络技术 数据库新建用户并赋所有权限 烟台培训网络技术班 数据库加密技术国产 在数据库中未提交又撤销的数据 数据库技术文案励志 一六八八网络技术有限公司 香港proxy服务器 潍坊市网络安全教育平台答题 北京科蓝软件开发有限公司 山东惠通网络技术有限公司 java 数据库导出 峰会网络安全人员 优米互联网科技QQ james配置数据库 青浦区综合软件开发品质保障 浅谈计算机通信网络安全与维护 网络安全密钥是什么连接不起 数据库文件对应什么模式 一键越狱软件开发 开软件开发公司需要买什么设备
0