2011-01-10 4 views
-3

exec()를 사용하여 간단한 선 그리기 프로그램을 실행 해 보았습니다. 잘 작동했습니다. 하지만 tcp/ip 네트워크 (서버가 프로그램을 읽고이를 문자열 유형의 변수 (b)로받는 클라이언트에게 전송)를 통해 동일한 프로그램을 실행하려고 시도한 다음 exec (b) 클라이언트에서 실행하기 만은 말한다 : 나가서 설명하자면 NameError가 :"exec()"중에 전역 이름 '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) 

코드는 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 

내가 잘못 여기에 무슨 일이 일어나고 있는지 이해 할 수없는입니다. 누구라도 도와 주면 감사 할 것입니다.

+0

를 살펴? – TryPyPy

+4

잠깐, 뭐라구? 네트워크를 통해 전체 코드를 보낸 다음 클라이언트에서 exec()를 수행합니까? 아마도 구현하고자하는 것을 구현하는 올바른 방법이 아닙니다. :) –

+3

세 가지 질문을했습니다. 예제에는 네트워크 프로그래밍이 없지만 모두 "파이썬에서 네트워크 프로그래밍"이라는 제목을 사용합니다. 또한 사람들이 묻는 질문에는 절대 * 답을하지 않습니다. 이것은 Stackoverflow에 대한 도움말을 얻는 올바른 방법이 아닙니다. –

답변

0

정확히 보낸 문자열과 exec는 무엇입니까?

작동하지 않는 main() 함수 만 보내는 것과 같은 오류가 발생합니다.

네트워킹 및 그래픽 하나의 접근 방법의 예를 들어
+0

'선을 그리는'모든 프로그램 (위에서 말한)은 네트워크를 통해 클라이언트에게 보내어 변수 'b'. 클라이언트 측에서 print b를 인쇄하는 명령문을 보냈습니다. 전체 프 로그 그램이 인쇄되므로 전체 프로그램이 보내지고 변수에 저장됩니다. 나는 함수와 함께 간단한 프로그램 인쇄 'hello world'를 보내려고했는데 같은 오류를 보여준다. 함수를 사용할 때 약간의 문제가 있습니다. 어떻게 작동시킬 수 있습니까? –

+0

내가 시도 간단한 프로그램 : 데프 HEL() : \t 인쇄 '안녕하세요' \t 반환 데프 주() : \t HEL() 주() 오류 : 스레드 스레드 1 예외 : 추적 (최근 호출 마지막) : __bootstrap_inner의 파일 "/usr/lib/python2.6/threading.py" self.run() 파일 "r13client.py", 31 행 실행 중 exec (b) 파일 "", 줄 6, 파일 "", 줄 5, 주 NameError : 전역 이름 'hel'이 정의되지 않았습니다. –

+0

@Ani Sunny : 음, 그곳에 흥미로운 오류가 있습니다. 나는 왜 그런지 상상할 수 없다. 그러나 당신의 솔루션은 의심의 여지가 없습니다. 이런 식으로 전체 프로그램을 보내지 마십시오. 그렇게 할 이유가 없습니다. 대신 서버에서 display() 및 main()을 정의하고 그물을 통해 매개 변수 만 보내십시오. 문제 해결됨. –

관련 문제