我正在尝试将一大堆逻辑封装到一个Python函数中,并将其作为参数传递给远程RPyC方法,我想在服务器上执行它。但RPyC将该函数视为回调并在本地执行。有办法吗?我可以强制服务器在服务器上而不是在客户端上执行它吗?
谢谢。
答案 0 :(得分:3)
teleport_function允许我从客户端到服务器的传输功能。
http://rpyc.readthedocs.org/en/latest/api/utils_classic.html#rpyc.utils.classic.teleport_function
答案 1 :(得分:1)
RPyC似乎转移int, long, bool, str, float, unicode, bytes, slice, complex, tuple (of simple types), forzenset (of simple types) as well as the following singletons: None, NotImplemented, and Ellipsis
(来自the RPyC manual),因此您可以发送unicode,您可以将代码作为字符串发送,eval发送给服务器端。
请注意,如果您这样做,我将能够在您的服务器上发送os.unlink(sys.argv[0])
之类的内容,或者您可能不想要的此类内容。换句话说,允许服务器运行任意代码是一个巨大的安全漏洞。
因此,如果您处于服务器到服务器的情况下,那么它就会消失,但如果您完全信任双方,我认为您真的不需要它,但如果它是“sa”客户端 - 服务器应用程序,它不会去。
如果你决定采用这种方式,eval可能不是正确的选择,打开你的服务器太多了。您已经探索了一些限制可能性的方法,根据您希望bunch of logic
允许做什么,搜索" python eval security",您将找到一些有趣的线程。