python3使用exec來動態加載模塊

xxglsvr.pysocket

#-*- coding:utf-8 -*-
from socketserver import ThreadingTCPServer, TCPServer, BaseRequestHandler
import tracebacktcp

class MyBaseRequestHandler(BaseRequestHandler):
def handle(self):
  #循環監聽(讀取)來自客戶端的數據
  while True:
    try:
      #一次讀取1024字節,並去除兩端的空白字符(包括空格,TAB,\r,\n)
      data = self.request.recv(1024).strip()
      data = data.decode()
      if data == '':
        break函數

      #self.client_address是客戶端的鏈接(host, port)的元組
      print("receive from %r: [%r]" % (self.client_address, data))
      ret = self.exec_sub(data, data)
      self.request.sendall(ret.encode())
    except:
      #traceback.print_exc() #當客戶端主動斷開鏈接時,self.recv(1024)會拋出異常
      breakcode

#根據報文名稱調用對應的模塊,並傳遞參數,將執行結果返回給客戶端
def exec_sub(self, procName, params):
try:
  loc = locals()
  exec("from %s import call_sub" % procName)
  call_sub = loc['call_sub']
  result = call_sub(params)
  return result
except Exception as e:
  print(str(e))
  return "error"server

if __name__ == "__main__":
  host = "" #主機名,能夠是ip,像localhost的主機名,或""
  port = 9999 #端口
  addr = (host, port)
  #server = TCPServer(addr, MyBaseRequestHandler)
  server = ThreadingTCPServer(addr, MyBaseRequestHandler)
  server.serve_forever()對象

---------------------------------------------------------------------------ip

xxglsvr01.pyutf-8

import sysget

def call_sub(params):
    return "call xxglsvr01(%s)" % paramsio

---------------------------------------------------------------------------

xxglsvr02.py

import sys

def call_sub(params):
    return "call xxglsvr02(%s)" % params

--------------------------------------------------------------------------

client1.py

import socket # 導入 socket 模塊

def main():
  tcpClientSocket= socket.socket() # 建立 socket 對象
  host = socket.gethostname() # 獲取本地主機名
  port = 9999 # 設置端口好
  tcpClientSocket.connect((host, port))

  #該函數返回接收到的數據,數據均以字節表示,參數bufsize表示一次收到的最大的字節數
  #使用這個方法好處是若是信號處理器未收到異常或系統請求中斷,會從新嘗試使系統從新請求而不是直接報錯
  data = "xxglsvr01"
  tcpClientSocket.sendall(data.encode())
  data = tcpClientSocket.recv(1024).strip()
  print(data.decode())

  tcpClientSocket.close()

if __name__ == "__main__":  main()

相關文章
相關標籤/搜索