从不同类中的另一个函数激活函数

2024-09-30 02:25:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图激活一个功能,一旦我完成,将改变一些电机的控制变量。这些命令是通过wifi通过socket服务器传入的。这是代码

import SocketServer
import Tkinter as Tk
from Tkinter import *

class MyTCPHandler(SocketServer.BaseRequestHandler):
      def handle(self):
            self.DriveSend = self.request.recv(1024).strip()
            self.SteeringSend = self.request.recv(1024).strip()
            #print("{} wrote:".format(self.client_address[0]))
            #print(self.DriveSend)
            #print(self.SteeringSend)
            #self.request.sendall(self.DriveSend.upper())
            #self.request.sendall(self.SteeringSend.upper())
            return (self.DriveSend,self.SteeringSend)
            MotorControl()

def MotorControl():
      MotorVar = MyTCPHandler()
      MotorVar.handle()
      MotorVar.DriveSend
      MotorVar.SteeringSend
      print(MotorVar.DriveSend)
      print(MotorVar.SteeringSend)
      print('test')

if __name__ == "__main__":
      HOST, PORT = "192.168.2.12", 9999
      server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
      server.serve_forever()

正如您所看到的,服务器不断地运行,并注意传入的消息,我希望它每次从我的客户机程序接收到新消息时都运行MotorControl函数。我试过这个,但它没有打印任何值(在我尝试和控制任何东西之前,我用一些基本的东西来测试它的方法)所有注释掉的部分都是原始测试的代码,用于检查服务器端的东西。所有这些都很好。你知道吗


Tags: 代码importself服务器tkinterrequestdefhandle
1条回答
网友
1楼 · 发布于 2024-09-30 02:25:09

这里有几件事不对。首先,MyTCPHandler方法在调用函数之前返回。当函数中的返回被命中时,执行会立即返回,并且不会再执行该函数中的代码。你知道吗

第二,有mytchphandler方法调用MotorControl函数,但是这个函数实例化了类的一个新实例,这个实例自然没有任何信息集。相反,应该将实例传递给函数。你知道吗

所以:

class MyTCPHandler(SocketServer.BaseRequestHandler):
      def handle(self):
            self.DriveSend = self.request.recv(1024).strip()
            self.SteeringSend = self.request.recv(1024).strip()
            MotorControl(self)
            return (self.DriveSend,self.SteeringSend)

def MotorControl(motor_var):
      print(motor_var.DriveSend)
      print(motor_var.SteeringSend)
      print('test')

尽管经过反思,我们还是不清楚为什么要在独立函数中使用它。您也许应该使MotorControl成为mytchphandler上的一个方法,这样它就可以访问self。你知道吗

相关问题 更多 >

    热门问题