首页 > 解决方案 > 如何在烧瓶主函数中访问变量

问题描述

如何访问我的views.py中flask main中声明的对象

           from flask_restful import Resource, request
            from flask_jwt_extended import jwt_required, get_jwt_identity, create_access_token
            from datetime import timedelta
            import string
            import views
            import paho.mqtt.client as mqtt
            #import client
            from run import api,app
    def startup():
        client = mqtt.Client(client_id=" ", clean_session=True, userdata=None,transport="tcp")
        global client
        client.on_connect = on_connect
        client.on_message = on_message
        #client.message_callback_add("SQT/CAP/REG/MODELNO/SLNO",send_command)
        #client.message_callback_add("SQT/CAP/+/+/DAT",data_receive)
        client.username_pw_set('dave','sectorqube')

        #client.tls_set(ca_certs="ssl2-master/server.crt", certfile="ssl2-master/ca.crt", keyfile="ssl2-master/ca-nopass.key", cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)
        #client.tls_insecure_set(True)
        client.connect("ec2-13-127-241-50.ap-south-1.compute.amazonaws.com",1883)
        client.loop_start()   
if __name__ == "__main__":
            views.startup()
            app.run(threaded=True) 

当我尝试从我的 views.py 访问全局变量时,它显示名称错误

from flask_restful import Resource, request
from datetime import timedelta
import string
import paho.mqtt.client as mqtt
from flask_restful import reqparse
import json
import ssl
def comand_off():
    topic="DEVICE/COMMAND"
    print(client.publish(topic,"OFF"))
    return {"success":True}

我得到的错误是这个

print(client.publish(topic,"ON")) NameError: name 'client' is not defined

我使用 gunicorn --bind 0.0.0.0:5000 资源运行:app

标签: pythonpython-3.xgunicorn

解决方案


如果你的主脚本叫做 main.py,你可以这样做

import main

然后在views.py中引用它

main.client

客户端应该在startup范围之外声明,例如将以下内容放在文件顶部:

client = None

然后给它赋值startup


推荐阅读