Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “exec()期间未定义全局名称“display”_Python_Networking - Fatal编程技术网

Python “exec()期间未定义全局名称“display”

Python “exec()期间未定义全局名称“display”,python,networking,Python,Networking,我尝试使用exec执行一个简单的线条绘制程序。 它工作得很好。但是,当我试图通过tcp/ip网络发送程序来执行同一程序时,服务器读取该程序并将其发送给客户端,客户端将其接收到字符串类型的变量B,然后我在客户端中使用execb来执行该程序,但它说: 名称错误:未定义全局名称“显示” 线条图代码为: from OpenGL.GLUT import * from OpenGL.GLU import * from OpenGL.GL import * import sys name = 'line'

我尝试使用exec执行一个简单的线条绘制程序。 它工作得很好。但是,当我试图通过tcp/ip网络发送程序来执行同一程序时,服务器读取该程序并将其发送给客户端,客户端将其接收到字符串类型的变量B,然后我在客户端中使用execb来执行该程序,但它说: 名称错误:未定义全局名称“显示”

线条图代码为:

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) 
代码执行到给出print hello的部分,然后停止

错误消息:

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

我无法理解这里出了什么问题。如果有人能帮忙,我将不胜感激。

您发送然后执行的字符串到底是什么


你的错误听起来像是你只发送了主函数,这是行不通的

有关网络和图形的一种方法的示例,请看一下

等等,什么?您是否通过网络发送整个代码,然后在客户端执行它!?这可能不是实现您试图实现的任何目标的正确方式你问了三个问题。在Python中,所有人都使用相同的标题“网络编程”,即使示例中没有网络编程。而且,你从不回答别人问你的问题。这不是获取Stackoverflow帮助的正确方法。是的,我确实发送了整个代码。我和我的朋友正在尝试用OpenGl创建一个网络渲染引擎。我们刚刚开始使用它,正在尝试发送代码并执行它。这些只是开始步骤。我们之前没有python或OpenGL方面的知识,我们在项目中学习,在网络编程方面也没有太多经验,因此如果有人能帮助我们,我们将不胜感激。。。打印b打印接收到的程序。我们这样做是为了检查是否收到了整个程序。通过网络发送代码是错误的解决方案。不要那样做。在渲染计算机中定义渲染函数,并仅发送数据。即,发送0 0 45 67绘制0,0到45,67之间的线。不要发送一个画线的函数。那太疯狂了。。。简而言之:不要使用exece。我上面发布的整个程序“画线”通过网络发送到客户端,并存储在变量“b”中。我在客户端提供了一个打印语句,即打印b。整个程序被打印出来,所以整个程序被发送并存储在变量中。我试着用一个函数发送一个简单的程序打印“hello world”,它显示了相同的错误。当我使用函数时出现了一些问题。如何使其工作?我尝试的简单程序:def hel:print'hello world'return def main:hel main error:thread thread-1中的异常:回溯最近的调用last:File/usr/lib/python2.6/threading.py,第532行,in u bootstrap\u internal self.run文件r13client.py,第31行,in run execb文件,第6行,in文件,第5行,主名称中错误:全局名称“hel”不是defined@Ani桑妮:嗯,这是一个有趣的错误。我无法想象为什么。但你的解决方案无疑是错误的。不要像这样来回发送整个程序,你没有理由这样做。相反,在服务器上定义display和main,并仅通过网络发送参数。问题解决了,你好。。我找到了一种方法来消除错误并让程序运行。我在一个类中声明了display函数,并将该类存储在一个全局变量中。然后在调用函数时,变量充当类variable.function\u name的对象。我是从网络本身得到这个想法的。这只是为了看看我是否可以将代码从一个系统发送到另一个系统,并在另一个系统上执行。要创建网络渲染引擎,整个渲染程序的各个部分将在网络中的不同计算机之间进行划分,对吗?这就是为什么我尝试了这个方法。我正在研究一种方法,通过将任务划分到两个不同的系统中来画一条线。一半线路由一个系统连接,另一半线路由另一个系统连接。我正试图找到一种方法来做到这一点。