main.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. """
  2. 入口程序
  3. 包都按需导入, 不需要使用的模块则不会导入
  4. 因此安装过程可以选用不完整安装
  5. 但依赖模块都都是固定的
  6. """
  7. import sys
  8. import os
  9. from conf import Config
  10. app = None
  11. def can_not_load(name):
  12. print(f"无法加载 {name} 系统, 该系统或其依赖可能不存在", file=sys.stderr)
  13. def main():
  14. """
  15. 入口程序
  16. :return:
  17. """
  18. if __name__ != "__main__" and Config.program != "website":
  19. print("运行程序出错", file=sys.stderr)
  20. exit(1)
  21. if Config.mysql_url is None or Config.mysql_name is None:
  22. print("请提供MySQL信息")
  23. sys.exit(1)
  24. program_name = Config.program
  25. if program_name == "setup": # setup程序不需要数据库链接等操作
  26. __main = os.path.dirname(os.path.abspath(__file__))
  27. exe = list(os.path.split(sys.executable))
  28. exe[-1] = exe[-1].replace("pythonw", "python")
  29. exe = os.path.join(*exe)
  30. res = os.system(f"{exe} {os.path.join(__main, 'init.py')} "
  31. f"--mysql_url={Config.mysql_url} "
  32. f"--mysql_name={Config.mysql_name} "
  33. f"--mysql_passwd={Config.mysql_passwd} "
  34. f"--mysql_port={Config.mysql_port} "
  35. f"--program=setup")
  36. if res != 0:
  37. print("初始化程序加载失败, 请检查配置是否正确而", file=sys.stderr)
  38. sys.exit(1)
  39. sys.exit(0)
  40. import pymysql # 下面才需要使用 pymysql
  41. try:
  42. from sql.db import DB
  43. mysql = DB()
  44. except pymysql.Error:
  45. print("无法连接到 MySQL")
  46. sys.exit(1)
  47. if program_name == "garbage":
  48. from equipment.aliyun import Aliyun
  49. if Config.aliyun_key is None or Config.aliyun_secret is None:
  50. print("请提供Aliyun key信息")
  51. sys.exit(1)
  52. try:
  53. from equipment.scan import HGSCapture, HGSQRCoder
  54. import tk_ui.station as garbage_station
  55. except ImportError:
  56. can_not_load("垃圾站系统")
  57. sys.exit(1)
  58. aliyun = Aliyun()
  59. cap = HGSCapture()
  60. qr = HGSQRCoder(cap)
  61. station = garbage_station.GarbageStation(mysql, cap, qr, aliyun)
  62. station.mainloop()
  63. elif program_name == "ranking":
  64. try:
  65. import tk_ui.ranking as ranking_station
  66. except ImportError:
  67. can_not_load("排行榜系统")
  68. sys.exit(1)
  69. station = ranking_station.RankingStation(mysql)
  70. station.mainloop()
  71. elif program_name == "manager":
  72. try:
  73. import tk_ui.admin as admin_station
  74. except ImportError:
  75. can_not_load("管理员系统")
  76. sys.exit(1)
  77. station = admin_station.AdminStation(mysql)
  78. station.mainloop()
  79. elif program_name == "website":
  80. try:
  81. from app import creat_web, App
  82. from flask import Flask
  83. from app.views import register
  84. except ImportError:
  85. can_not_load("在线排行榜服务")
  86. sys.exit(1)
  87. global app
  88. if __name__ == "__main__":
  89. app = creat_web(mysql) # 暴露 app 接口
  90. print("Waitress Web 服务启动 访问: http://127.0.0.1:8080/")
  91. app.run_waitress(host='0.0.0.0', port="8080")
  92. else:
  93. tmp = creat_web(mysql) # 暴露 app 接口
  94. app = tmp.get_app()
  95. else:
  96. can_not_load(program_name)
  97. sys.exit(1)
  98. main()