在XMLRPC中表示退出状态和实际结果的约定

2024-04-26 22:13:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在C世界中,函数可以返回错误代码来表示退出状态,并使用INOUT/OUT参数来携带进程的实际结果。对于xmlrpc,没有INOUT/OUT参数,是否有任何最佳实践/惯例来表示退出状态和实际结果?在

上下文是我试图编写一个运行在服务器上的代理/守护程序(pythonsimplexmlrpcserver),并希望设计与之交互的“协议”。在

如有任何建议,我们将不胜感激。在

编辑: 根据S.Lott的评论,把问题弄清楚。在

  • 它更多的是关于操作系统的惯例 比C公约。我同意这一点。

  • 代理的工作或多或少是在服务器上运行一些cmd,固有的退出代码/结果习惯用法

一。在


Tags: 函数程序服务器协议代理参数进程状态
2条回答

在Python中实现这一点的一个简单方法是使用tuple。让您的函数返回一个元组:(status,result),其中的状态可以是数字或字符串,结果可以是您喜欢的任何Python数据结构。在

下面是一个例子,改编自模块文档。服务器代码:

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()

客户代码:

^{pr2}$

server函数返回一个元组

在C语言环境中,函数可以返回错误代码来表示退出状态,并使用INOUT/OUT参数携带进程的实际结果

  1. 将退出状态视为黑客攻击。这不是C-ism,而是Linux-ism。C函数只返回一个值。C没有异常,所以有几种方法来表示失败,都很糟糕。在

    需要的是异常处理。Python和Java都有这个特性,它们不需要退出状态。在

    然而,操作系统仍然依赖于退出状态,因为shell脚本仍然非常原始,而且有些语言(如C)不能产生异常。

  2. 考虑输入/输出变量也是一种黑客行为。这是一个可怕的黑客攻击,因为函数除了返回一个值之外还有多个副作用。

这两个“特性”并不是最好的设计模式。在

理想情况下,一个函数是“幂等”的,无论你调用它多少次,都会得到相同的结果。In/Out变量以模糊、难以调试的方式打破了幂等性。在

您并不真正需要这些特性中的任何一个,这就是为什么您没有看到许多实现它们的最佳实践。在

最佳实践是返回值或引发异常。如果需要返回多个值,则返回一个元组。如果事情不起作用,你不返回退出状态,你会引发一个异常。在


更新。由于远程进程基本上是RSH来运行远程命令,所以您应该做remctl所做的事情。在

你需要精确地模仿:http://linux.die.net/man/1/remctl。你必须编写一个Python客户机和服务器。服务器返回一条带有状态代码(以及任何其他摘要,如运行时)的消息。客户端以相同的状态代码退出。在

相关问题 更多 >