2013-08-20 54 views
0

我一直在我的“控制器”中为我的树莓派机器人使用字符串变量,这取决于用户箭头键输入以及它们何时更改通过套接字服务器发送信息。这个程序在我的笔记本电脑上运行良好,并且一个基本的服务器可以打印接收到的信息在我的Raspberry Pi上运行我现在正在使用这些信息来控制电机等。我的问题是由于某种原因,我无法得到这个工作。字符串变量不能在树莓派上工作

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) 
       main.DriveVar.set(self.DriveSend) 
       main.SteeringVar.set(self.SteeringSend) 
       self.request.sendall(self.DriveSend.upper()) 
       self.request.sendall(self.SteeringSend.upper()) 
if __name__ == "__main__": 
     HOST, PORT = "192.168.2.12", 9999 
     server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
     server.serve_forever() 
     DriveVar = StringVar() 
     SteeringVar = StringVar() 

下面是产生的异常/错误。

Exception happened during processing of request from ('192.168.2.10', 52447) 
Traceback (most recent call last): 
File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock 
self.process_request(request, client_address) 
File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request 
self.finish_request(request, client_address) 
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request 
self.RequestHandlerClass(request, client_address, self) 
File "/usr/lib/python2.7/SocketServer.py", line 638, in __init__ 
self.handle() 
File "server.py", line 12, in handle 
main.DriveVar.set(self.DriveSend) 
NameError: global name 'main' is not defined 

为什么这不起作用? 如何解决它还是我应该怎么用,而不是(在铭记变量在由主

+0

你的'main'定义在哪里?如果它是一个模块名称,你应该导入它。如果'Main'是一个模块中定义的类,那么你必须在它前面加上模块名称。区分大小写。 – pepr

回答

0

称为类中的一个函数接收我最终设法得到这个工作,但没有字符串变量。

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()) 
      motorcontrol.self 
      return(self.DriveSend,self.SteeringSend) 

def motorcontrol(motor_var) 
    motor = motor_var.DriveSend 
    steering = motor_var.SteeringSend 
if __name__ == "__main__": 
    HOST, PORT = "192.168.2.12", 9999 
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
    server.serve_forever()