2013-08-20 5 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'이 모듈에 정의 된 클래스 인 경우 모듈 이름 앞에 접두사를 추가해야합니다. 또한 Python 대소 문자를 구분합니다. – 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() 
관련 문제