我正在为房子中不同计算机上运行的某些应用构建python服务器。为此,我尝试设置一个服务器来响应来自任何这些应用程序的命令。套接字通讯正常运行,Python指示命令已执行,但我希望更改的变量没有任何变化。
我正在Python 3.7上进行测试。
import sys
import time
import socket
data = "";
result = "";
def server():
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
while 1:
data = conn.recv(BUFFER_SIZE).decode()
if (len(data)>0):
try:
exec(data);
print("Execution OK of "+data+", result: "+result);
conn.send(result.encode()) # send the final value back to the client
except Exception as e:
print("Error executing: ",data, " msg: ",str(e));
else:
time.sleep(1);
result = "UNINITIALIZED"
server()
要对此进行测试,我从另一个python控制台发出以下命令:
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "result='initialized'";
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE.encode())
data = s.recv(BUFFER_SIZE).decode()
s.close()
print("received data:", data)
我希望服务器接收到数据(工作正常)后,“结果”的值应更改为“初始化”,并且我会在服务器中看到更新后的值,并在回显中回复给客户。在这两种情况下,“结果”均保留原始的“未初始化”值。
谢谢!
答案 0 :(得分:1)
您可以简单地将以下参数添加到exec
函数中:
exec(data, globals())