如何在启动webpy服务器时更改启动消息?

时间:2016-03-15 07:50:34

标签: python web.py

我正在使用web.py框架编写命令行工具。我使用

启动服务器
class MyApplication(web.application):
    def run(self, port=8080, *middleware):
        func = self.wsgifunc(*middleware)
        return web.httpserver.runsimple(func, ('0.0.0.0', port))

app = MyApplication(urls, globals())
app.run(port=9090)

这时我收到一条控制台消息说:

http://0.0.0.0:9090/

如何将此邮件覆盖为我自己的自定义邮件?

1 个答案:

答案 0 :(得分:0)

技术上可以通过覆盖sys.stdout

来覆盖此消息
import sys
o = sys.stdout
sys.stdout = open('/dev/null', 'w')
app.run(port=9090)

当然这会抑制所有刷新到stdout的消息,因此您可能需要覆盖/猴子修补WSGIServer.start方法,以分配回真实的sys.stdout对象。

您可以在覆盖/猴子修补WSGIServer.start功能中打印任何自定义消息。

完全可行的演示:

import web
from web import httpserver
import sys


WSGIServer = httpserver.WSGIServer
stdout = sys.stdout
message = "Welcome"


def _WSGIServer(*args):
    server = WSGIServer(*args)
    start = server.start

    def _start(*args):
        sys.stdout = stdout
        print message
        start()
    server.start = _start
    return server
httpserver.WSGIServer = _WSGIServer


class MyApplication(web.application):
    def run(self, port=8080, *middleware):
        func = self.wsgifunc(*middleware)
        return web.httpserver.runsimple(func, ('0.0.0.0', port))


app = MyApplication([], globals())
sys.stdout = open('/dev/null', 'w')
app.run(port=9090)