【问题标题】:run python script from flask从烧瓶运行python脚本
【发布时间】:2021-04-23 23:22:02
【问题描述】:

我有一个 python 脚本 (script.py),当我在控制台中运行它时,它会不断接收 JSON 格式的数据,现在我想在网页上可视化控制台的输出或能够执行script.py 并捕获输出以在浏览器中查看,根据我所阅读的内容,我了解使用 FLASK 我可以做到这一点,一个示例或指南来实现它。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def code():
    out = open(r'output.py', 'r').read()
    return exec(out)

if __name__ == '__main__':
    app.run(host='0.0.0.0')

///////////////////////////////////////

builtins.RuntimeError

RuntimeError:线程 'Thread-9' 中没有当前事件循环。 Traceback(最近一次通话最后一次)

File "..//python3.6/site-packages/flask/app.py", line 2301, in __call__

return self.wsgi_app(environ, start_response)

File "..//python3.6/site-packages/flask/app.py", line 2287, in wsgi_app

response = self.handle_exception(e)

File "..//python3.6/site-packages/flask/app.py", line 1733, in handle_exception

reraise(exc_type, exc_value, tb)

File "..//python3.6/site-packages/flask/_compat.py", line 35, in reraise

raise value

File "..//python3.6/site-packages/flask/app.py", line 2284, in wsgi_app

response = self.full_dispatch_request()

File "..//python3.6/site-packages/flask/app.py", line 1807, in full_dispatch_request

rv = self.handle_user_exception(e)

File "..//python3.6/site-packages/flask/app.py", line 1710, in handle_user_exception

reraise(exc_type, exc_value, tb)

File "..//python3.6/site-packages/flask/_compat.py", line 35, in reraise

raise value

File "..//python3.6/site-packages/flask/app.py", line 1805, in full_dispatch_request

rv = self.dispatch_request()

File "..//python3.6/site-packages/flask/app.py", line 1791, in dispatch_request

return self.view_functions[rule.endpoint](**req.view_args)

File "/usr/share/server/www/test/index1.py", line 9, in dynamic_page

return exec(file)

File "<string>", line 60, in <module>

/////////////////////////////////////// ///////////////////////// 输出.py

#!/usr/bin/env python3

导入 json 导入系统

从手机导入Runn、BReporter、EventHandler

类 NoOpEventHandler(EventHandler):

def on_event(self, event):
    self._reporter.on_event(event)

类 VerboseNoOpEventHandler(NoOpEventHandler):

FILTER_EVENTS = False

类 JsonReporter(BReporter):

def __init__(self):
    self._has_first_line = False

def on_event(self, event):

    json_data = json.dumps(dict(event), sort_keys=True)

    if self._has_first_line:
        sys.stdout.write(',')
    else:
        sys.stdout.write('[')
        self._has_first_line = True

    sys.stdout.write('\n  {}'.format(json_data))

def close(self):
    sys.stdout.write('\n]')

reporter = JsonReporter()

跑步者=跑步([ 'tcp://test123:test123@127.0.0.1:5038', ],记者,处理程序=NoOpEventHandler) runner.run()

【问题讨论】:

    标签: python flask web


    【解决方案1】:

    就用这个吧;你必须设置debug = True。您不必提供主机进行测试。

    if __name__ == "__main__":
        app.run(debug=True)
    

    你应该会在终端上看到类似的输出;

    * Serving Flask app "my_flask_app" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: on
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: xxx-xxx-xxx
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    

    打开网络浏览器并复制粘贴:http://127.0.0.1:5000/

    【讨论】:

    • 如果他在另一台机器上测试,他确实需要提供host
    【解决方案2】:

    我将您的代码保存在tmp.py 中,并以python tmp.py 运行。

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/")
    def code():
        out = open(r'output.py', 'r').read()
        return exec(out)
    
    if __name__ == '__main__':
        app.run(debug = True)
    

    运行如下:

       (flaskvenv) C:...>python tmp.py
    

    这是输出:

    * Serving Flask app "tmp" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: on
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: XXX-XXX-XXX
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    

    这意味着代码运行。您可能还有其他问题!

    【讨论】:

      【解决方案3】:

      我认为问题出在 exec(out) 上。实际上,exec是一个程序的动态执行,可以是字符串也可以是目标代码,它不返回任何东西,它只是执行一个程序并返回None。

      如果您在不尝试返回 exec(out) 的情况下运行代码,则不会出错。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多