python的三个函数(eval、exec、complie)和python版RMI

时间:2023-01-30 20:55:34

一、python的三个函数:

1、eval函数:

之前已经讲过了这个函数,该函数也类似于php的eval,例如下边这个例子

1 eval("os.system('id')")

但是有个问题,在eval中没办法执行赋值操作。

2、exec函数:

可以执行赋值操作,其他方便也比较类似于eval函数

1 exec("os.system('id')")

给一个赋值操作的例子:

1 exec("a.__code__=b.__code__")

3、compile函数:

其实这个函数有点类似医院挂号分诊的功能:

举两个例子说明吧:

1 exec_code = compile("""for i in range(4):print i""","","exec")
2 exec(exec_code)
3 eval_code = compile("os.system('id')","","eval")
4 eval(eval_code)

二、python的RMI

1、注册对象:

(1)服务端脚本

 1 #服务器端:
2 import SimpleXMLRPCServer
3
4 class MyObject:
5 def sayHello(self):
6 return "hello xmlprc"
7
8 obj = MyObject()
9 server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8088))
10 server.register_instance(obj)
11
12 print "Listening on port 8088"
13 server.serve_forever()

(2)客户端脚本

1 import xmlrpclib
2
3 server = xmlrpclib.ServerProxy("http://localhost:8088")
4
5 words = server.sayHello()
6
7 print "result:" + words

(3)备注:我发现的问题——调用对象的没有return的函数会导致崩溃打印堆栈,不知道为啥。

2、注册函数:

(1)服务端脚本

1 from SimpleXMLRPCServer import SimpleXMLRPCServer   
2 def respon_string(str):
3 return "get string :%s"%str
4
5 if __name__ == '__main__':
6 s = SimpleXMLRPCServer(('0.0.0.0', 8080))
7 s.register_function(respon_string,"get_string")
8 s.serve_forever()

(2)客户端脚本:

1 from xmlrpclib import ServerProxy
2 if __name__ == '__main__':
3 s = ServerProxy("http://192.168.137.9:8080")
4 print s.get_string("hello")

(3)备注:我发现的问题——调用对象的没有return的函数会导致崩溃打印堆栈,不知道为啥。