Глобальное имя 'display' не определено во время "exec ()" - PullRequest
0 голосов
/ 10 января 2011

Я попытался выполнить простую программу рисования линий, используя exec (). Работало нормально. Но когда я попытался выполнить ту же программу, отправив ее через сеть tcp / ip (сервер читает программу и отправляет ее клиенту, который получает ее в переменную (b) строкового типа), а затем я использую exec (b ) в клиенте, чтобы выполнить его, но он говорит: NameError: глобальное имя 'display' не определено

Код для рисования линий:

from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
import sys

name = 'line'

def display():
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
 glPushMatrix()
 glTranslatef(-1,-1,0)
 gluLookAt(
  0.1, 0.1, 0.3,
  0.0, 0.0, 0.0,
  0.0, 1.0, 0.0);

 glLineWidth(3.0)
 color = [1.,1.,1.,1.]
 glBegin(GL_LINES)
 glVertex3f(0,0,0) # origin of the line
 glVertex3f(.5,1.0,.9) # ending point of the line
 glEnd()
 glPopMatrix()
 glutSwapBuffers()
 return
def main():
 glutInit(sys.argv)
 print 'hello'
 glutCreateWindow(name)
 glClearColor(0.4,0.5,0.3,1.0)
 glutDisplayFunc(display)
 glutMainLoop()
 return
main()

Эта часть клиентского кода получает программу и сохраняет ее в переменной, а затем мы используем exec ():

while f: 
   a = client.recv(1024)
   if a=="#p":
    f=0
    break
   b+=a

  print b

  exec(b) 

Код выполняется до той части, где выдается печать привет, а затем останавливается.

Сообщение об ошибке:

hello
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "r13client.py", line 31, in run
    exec(b)
  File "<string>", line 34, in <module>
  File "<string>", line 31, in main
NameError: global name 'display' is not defined

Я не могу понять, что здесь происходит не так. Если бы кто-нибудь мог помочь, я был бы благодарен.

Ответы [ 2 ]

0 голосов
/ 10 января 2011

Для примера одного подхода к работе в сети и графике взгляните на https://launchpad.net/game

0 голосов
/ 10 января 2011

Какую именно строку вы отправляете, а затем исполняете?

Ваша ошибка звучит так, как будто вы отправляете только функцию main (), которая не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...