FLA*_*ASh 4 python sockets serialization
我想编写一个最简单的程序,让我有机会使用套接字和序列化。
基本思想是将数据以函数名和要处理的数据传送到服务器端。然后反序列化服务器端发送的这些数据,以调用函数并执行某些操作。然后发回响应。
现在发送到服务器的数据 - 我需要调用的 func 名称,我需要使用该 func 处理的数据。
我使用 pickle.loads 来解包数据,现在我有一个 func 名称作为 str 和字典来处理。如果我将它硬编码 - 它会起作用。
我需要调用的 func 名称 - func。但我希望能够调用将从客户端发送的任何函数。
我知道我需要使用 getattr 才能做到这一点。但是如何?我在这里和其他网站上阅读了几个问题,但仍然不知道我需要做什么。
如果不了解您目前已尝试过的内容,就很难看出您究竟想要完成什么。
尽管如此,如果您要调用的函数实际上是某个对象上的方法,则可以使用 getattr:
# somestring is a string, but could be any object
somestring = "valentyn"
# somestring.upper happens to be a method
method = getattr(somestring, "upper")
# ...which can be called in the usual manner
print(method())
Run Code Online (Sandbox Code Playgroud)
如果要调用本地定义的函数,可以使用 locals():
def wow():
return "spam"
# locals() returns a dict of variables and functions that are locally defined
print(locals()["wow"]())
Run Code Online (Sandbox Code Playgroud)
如果您事先知道要公开哪些函数,则可以考虑制作函数字典:
def foo():
...
def bar():
...
funcs = {"foo": foo, "bar": bar}
funcs["foo"]()
Run Code Online (Sandbox Code Playgroud)
最后,如果您要运行的代码实际上是从客户端发送的,就像您说的那样,您唯一的选择是使用eval- 但是,这比上面的选项更不安全。
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |