python3使用exec來動態載入模組

2022-07-26 23:24:18 字數 2206 閱讀 7817

xxglsvr.py

#-*- coding:utf-8 -*-

from socketserver import threadingtcpserver, tcpserver, baserequesthandler

import traceback

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)會丟擲異常

break

#根據報文名稱呼叫對應的模組,並傳遞引數,將執行結果返回給客戶端

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"

if __name__ == "__main__":

host = "" #主機名,可以是ip,像localhost的主機名,或""

port = 9999 #埠

addr = (host, port)

#server = tcpserver(addr, mybaserequesthandler)

server = threadingtcpserver(addr, mybaserequesthandler)

server.serve_forever()

xxglsvr01.py

import sys

def call_sub(params):

return "call xxglsvr01(%s)" % params

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()

python3使用importlib來重複載入模組

coding utf 8 from socketserver import threadingtcpserver,baserequesthandler import importlib import traceback import time import logging logging.basic...

python3使用 python3使用模組

python內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def tes...

python3中的eval和exec的區別與聯絡

看了很多網上的方法,寫入檔案後開啟檔案看確實不再是亂碼,但是從檔案中讀入json時發現了亂碼,可能是讀檔案預設的編碼格式不對。下面讀寫方法可行。注意,ensure ascii false可以保證不會以ascii格式編碼,保證中文的正常轉換 import js程式設計客棧on with open te...