我已经创建了一个简单的Python XML-RPC实现,主要基于这些示例.
但是,它发送如下输出:
foo.bar.com - - [13/Feb/2010 17:55:47] "POST /RPC2 HTTP/1.0" 200 -
...到终端,即使我使用>>
或将标准输出和标准错误重定向到文件>
.我正在使用以下行:
python foobar 2>&1 >> foobar.log
看起来它似乎不是标准输出,而是其他地方.
此外,当收到请求时发生异常时,整个应用程序崩溃时出现此错误:
---------------------------------------- Exception happened during processing of request from ('1.2.3.4', 51284)
我该如何处理这个异常?我需要优雅地恢复,只记录异常消息而不是服务器崩溃.
我想你正在使用SimpleXMLRPCServer
这些例子中的类.在这种情况下,只需logRequests
在创建时提供参数:
server = SimpleXMLRPCServer(("localhost", 8000), logRequests = False)
这将抑制请求记录.
至于例外,它们已登录BaseServer
(参见"SocketServer.py"的源代码):
def handle_error(self, request, client_address): """Handle an error gracefully. May be overridden. The default is to print a traceback and continue. """ print '-'*40 print 'Exception happened during processing of request from', print client_address import traceback traceback.print_exc() # XXX But this goes to stderr! print '-'*40
如您所见,第一部分是写入stdout的,这就是为什么&2>1
不能完全运行的原因.如果要禁止它们,请覆盖或覆盖该方法.