123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- """
- 入口程序
- 包都按需导入, 不需要使用的模块则不会导入
- 因此安装过程可以选用不完整安装
- 但依赖模块都都是固定的
- """
- import sys
- import os
- from conf import Config
- app = None
- def can_not_load(name):
- print(f"无法加载 {name} 系统, 该系统或其依赖可能不存在", file=sys.stderr)
- def main():
- """
- 入口程序
- :return:
- """
- if __name__ != "__main__" and Config.program != "website":
- print("运行程序出错", file=sys.stderr)
- exit(1)
- if Config.mysql_url is None or Config.mysql_name is None:
- print("请提供MySQL信息")
- sys.exit(1)
- program_name = Config.program
- if program_name == "setup": # setup程序不需要数据库链接等操作
- __main = os.path.dirname(os.path.abspath(__file__))
- exe = list(os.path.split(sys.executable))
- exe[-1] = exe[-1].replace("pythonw", "python")
- exe = os.path.join(*exe)
- res = os.system(f"{exe} {os.path.join(__main, 'init.py')} "
- f"--mysql_url={Config.mysql_url} "
- f"--mysql_name={Config.mysql_name} "
- f"--mysql_passwd={Config.mysql_passwd} "
- f"--mysql_port={Config.mysql_port} "
- f"--program=setup")
- if res != 0:
- print("初始化程序加载失败, 请检查配置是否正确而", file=sys.stderr)
- sys.exit(1)
- sys.exit(0)
- import pymysql # 下面才需要使用 pymysql
- try:
- from sql.db import DB
- mysql = DB()
- except pymysql.Error:
- print("无法连接到 MySQL")
- sys.exit(1)
- if program_name == "garbage":
- from equipment.aliyun import Aliyun
- if Config.aliyun_key is None or Config.aliyun_secret is None:
- print("请提供Aliyun key信息")
- sys.exit(1)
- try:
- from equipment.scan import HGSCapture, HGSQRCoder
- import tk_ui.station as garbage_station
- except ImportError:
- can_not_load("垃圾站系统")
- sys.exit(1)
- aliyun = Aliyun()
- cap = HGSCapture()
- qr = HGSQRCoder(cap)
- station = garbage_station.GarbageStation(mysql, cap, qr, aliyun)
- station.mainloop()
- elif program_name == "ranking":
- try:
- import tk_ui.ranking as ranking_station
- except ImportError:
- can_not_load("排行榜系统")
- sys.exit(1)
- station = ranking_station.RankingStation(mysql)
- station.mainloop()
- elif program_name == "manager":
- try:
- import tk_ui.admin as admin_station
- except ImportError:
- can_not_load("管理员系统")
- sys.exit(1)
- station = admin_station.AdminStation(mysql)
- station.mainloop()
- elif program_name == "website":
- try:
- from app import creat_web, App
- from flask import Flask
- from app.views import register
- except ImportError:
- can_not_load("在线排行榜服务")
- sys.exit(1)
- global app
- if __name__ == "__main__":
- app = creat_web(mysql) # 暴露 app 接口
- print("Waitress Web 服务启动 访问: http://127.0.0.1:8080/")
- app.run_waitress(host='0.0.0.0', port="8080")
- else:
- tmp = creat_web(mysql) # 暴露 app 接口
- app = tmp.get_app()
- else:
- can_not_load(program_name)
- sys.exit(1)
- main()
|