一、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的函数会导致崩溃打印堆栈,不知道为啥。
最新评论