亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

補充subprocess模塊和粘包現象及解決辦法是什么

發布時間:2021-12-08 14:26:36 來源:億速云 閱讀:132 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關補充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模塊和粘包現象及解決辦法是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台东县| 江油市| 麻阳| 衢州市| 政和县| 泗洪县| 绍兴县| 久治县| 德清县| 和田县| 安庆市| 乌兰县| 赤峰市| 辉县市| 新竹市| 和林格尔县| 叶城县| 巴楚县| 南京市| 乐至县| 荣昌县| 武穴市| 忻城县| 武陟县| 阜阳市| 馆陶县| 西贡区| 静宁县| 台前县| 光山县| 石柱| 东方市| 体育| 诸城市| 金坛市| 连山| 益阳市| 扬州市| 洛隆县| 稷山县| 宜城市|