-
Notifications
You must be signed in to change notification settings - Fork 130
/
Copy pathmain.py
68 lines (55 loc) · 1.59 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import argparse
import logging
import sys
import signal
from src.application import Application
from src.utils.logging_config import setup_logging
logger = logging.getLogger("Main")
# 配置日志
def parse_args():
"""解析命令行参数"""
parser = argparse.ArgumentParser(description='小智ai客户端')
# 添加界面模式参数
parser.add_argument(
'--mode',
choices=['gui', 'cli'],
default='gui',
help='运行模式:gui(图形界面) 或 cli(命令行)'
)
# 添加协议选择参数
parser.add_argument(
'--protocol',
choices=['mqtt', 'websocket'],
default='websocket',
help='通信协议:mqtt 或 websocket'
)
return parser.parse_args()
def signal_handler(sig, frame):
"""处理Ctrl+C信号"""
logger.info("接收到中断信号,正在关闭...")
app = Application.get_instance()
app.shutdown()
sys.exit(0)
def main():
"""程序入口点"""
# 注册信号处理器
signal.signal(signal.SIGINT, signal_handler)
# 解析命令行参数
args = parse_args()
try:
# 日志
setup_logging()
# 创建并运行应用程序
app = Application.get_instance()
logger.info("应用程序已启动,按Ctrl+C退出")
# 启动应用,传入参数
app.run(
mode=args.mode,
protocol=args.protocol
)
except Exception as e:
logger.error(f"程序发生错误: {e}", exc_info=True)
return 1
return 0
if __name__ == "__main__":
sys.exit(main())