from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
requestHandler=RequestHandler)
def myfunction(x, y):
status = 1
result = [5, 6, [4, 5]]
return (status, result)
server.register_function(myfunction)
# Run the server's main loop
server.serve_forever()
在Python中实现这一点的一个简单方法是使用tuple。让您的函数返回一个元组:(status,result),其中的状态可以是数字或字符串,结果可以是您喜欢的任何Python数据结构。在
下面是一个例子,改编自模块文档。服务器代码:
客户代码:
^{pr2}$server函数返回一个元组
在C语言环境中,函数可以返回错误代码来表示退出状态,并使用INOUT/OUT参数携带进程的实际结果
将退出状态视为黑客攻击。这不是C-ism,而是Linux-ism。C函数只返回一个值。C没有异常,所以有几种方法来表示失败,都很糟糕。在
需要的是异常处理。Python和Java都有这个特性,它们不需要退出状态。在
然而,操作系统仍然依赖于退出状态,因为shell脚本仍然非常原始,而且有些语言(如C)不能产生异常。
考虑输入/输出变量也是一种黑客行为。这是一个可怕的黑客攻击,因为函数除了返回一个值之外还有多个副作用。
这两个“特性”并不是最好的设计模式。在
理想情况下,一个函数是“幂等”的,无论你调用它多少次,都会得到相同的结果。In/Out变量以模糊、难以调试的方式打破了幂等性。在
您并不真正需要这些特性中的任何一个,这就是为什么您没有看到许多实现它们的最佳实践。在
最佳实践是返回值或引发异常。如果需要返回多个值,则返回一个元组。如果事情不起作用,你不返回退出状态,你会引发一个异常。在
更新。由于远程进程基本上是RSH来运行远程命令,所以您应该做
remctl
所做的事情。在你需要精确地模仿:http://linux.die.net/man/1/remctl。你必须编写一个Python客户机和服务器。服务器返回一条带有状态代码(以及任何其他摘要,如运行时)的消息。客户端以相同的状态代码退出。在
相关问题 更多 >
编程相关推荐