执行通过套接字接收的命令的Python问题

时间:2019-05-05 21:38:11

标签: python sockets exec

我正在为房子中不同计算机上运行的某些应用构建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)

我希望服务器接收到数据(工作正常)后,“结果”的值应更改为“初始化”,并且我会在服务器中看到更新后的值,并在回显中回复给客户。在这两种情况下,“结果”均保留原始的“未初始化”值。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以简单地将以下参数添加到exec函数中:

exec(data, globals())