-1

这是我第一个使用 Flask 和 SSE 的应用程序,我需要找到一种方法来返回页面,这些异常可能在事件执行期间发生。此应用程序使用 Netconf 从路由器获取一些实时信息。

我创建了一些仅在 Flask 控制台中向我显示消息的异常,但我需要将其显示在 HTML 界面中并中断流。

@app.route('/data')
def data():
    def generate():
        try:
            conn = manager.connect(
                    host='10.0.0.1',
                    port='22',
                    username='admin',
                    password='123',
                    timeout=10,
                    device_params={'name':'junos'},
                    hostkey_verify=False
            def getInterface(command):
                interface = command.xpath('//system-information')
                return interface

            try:
                interface = getInterface(conn.command('code to get information'))
            except:
                print('Error, interface not found!')
                conn.close_session()

        except Exception as e:
            print('Error! ' + str(e))

    return Response(generate(), mimetype= 'text/event-stream')

上面的代码如果出现异常,它不会停止 SSE '循环'并不断重复登录到控制台消息“错误,找不到接口!”

我如何通过将这些异常发送到 HTML 界面来处理它并在它发生时停止 SSE 的执行?

4

2 回答 2

0

只需在异常中使用异常消息进行新的响应即可。

return Response('Error, interface not found!')
于 2019-08-08T13:54:34.820 回答
0
from flask import Response

@app.route('/data')
def data():
    def generate():
        try:
            conn = manager.connect(
                host='10.0.0.1',
                port='22',
                username='admin',
                password='123',
                timeout=10,
                device_params={'name':'junos'},
                hostkey_verify=False
            def getInterface(command):
                interface = command.xpath('//system-information')
                return interface

            try:
                interface = getInterface(conn.command('code to get information'))
            except:
                # Close the session before the return statement
                conn.close_session()
                return Response('Error, interface not found!')

        except Exception as e:
            # Simply return the Response as shown in the above answer.
            # as posted by @Kostas Charitidis
            return Response('Error! ' + str(e))

    return Response(generate(), mimetype= 'text/event-stream')
于 2019-08-08T14:47:26.843 回答