Я попытался выполнить простую программу рисования линий, используя 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
Я не могу понять, что здесь происходит не так. Если бы кто-нибудь мог помочь, я был бы благодарен.