我已经创建了一个简单的Python XML-RPC实现,主要基于这些示例.
但是,它发送如下输出:
foo.bar.com - - [13/Feb/2010 17:55:47] "POST /RPC2 HTTP/1.0" 200 -
Run Code Online (Sandbox Code Playgroud)
...到终端,即使我使用>>或将标准输出和标准错误重定向到文件>.我正在使用以下行:
python foobar 2>&1 >> foobar.log
Run Code Online (Sandbox Code Playgroud)
看起来它似乎不是标准输出,而是其他地方.
此外,当收到请求时发生异常时,整个应用程序崩溃时出现此错误:
----------------------------------------
Exception happened during processing of request from ('1.2.3.4', 51284)
Run Code Online (Sandbox Code Playgroud)
我该如何处理这个异常?我需要优雅地恢复,只记录异常消息而不是服务器崩溃.
我想你正在使用SimpleXMLRPCServer这些例子中的类.在这种情况下,只需logRequests在创建时提供参数:
server = SimpleXMLRPCServer(("localhost", 8000), logRequests = False)
Run Code Online (Sandbox Code Playgroud)
这将抑制请求记录.
至于例外,它们已登录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
Run Code Online (Sandbox Code Playgroud)
如您所见,第一部分是写入stdout的,这就是为什么&2>1不能完全运行的原因.如果要禁止它们,请覆盖或覆盖该方法.