-
-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathrun.py
More file actions
executable file
·74 lines (62 loc) · 3.13 KB
/
run.py
File metadata and controls
executable file
·74 lines (62 loc) · 3.13 KB
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
69
70
71
72
73
74
#!/usr/bin/env python3
import logging
import sys
import os
import argparse
# Prevent Python from creating __pycache__ directories in plugin dirs.
# The root service loads plugins via importlib, and root-owned __pycache__
# files block the web service (non-root) from updating/uninstalling plugins.
sys.dont_write_bytecode = True
# Add project directory to Python path (needed before importing src modules)
project_dir = os.path.dirname(os.path.abspath(__file__))
if project_dir not in sys.path:
sys.path.insert(0, project_dir)
# Parse command-line arguments BEFORE any imports
parser = argparse.ArgumentParser(description='LEDMatrix Display Controller')
parser.add_argument('-e', '--emulator', action='store_true',
help='Run in emulator mode (uses pygame/RGBMatrixEmulator instead of hardware)')
parser.add_argument('-d', '--debug', action='store_true',
help='Enable debug logging and verbose output')
args = parser.parse_args()
# Set emulator mode if requested (must be done BEFORE any imports that check EMULATOR env var)
if args.emulator:
os.environ["EMULATOR"] = "true"
print("=" * 60)
print("LEDMatrix Emulator Mode Enabled")
print("=" * 60)
print("Using pygame/RGBMatrixEmulator for display")
print("Press ESC to exit\n")
# Project directory already added above
# Debug output (only in debug mode or emulator mode)
debug_mode = args.debug or args.emulator or os.environ.get('LEDMATRIX_DEBUG', '').lower() == 'true'
if debug_mode:
print(f"DEBUG: Project directory: {project_dir}", flush=True)
print(f"DEBUG: Python path[0]: {sys.path[0]}", flush=True)
print(f"DEBUG: Current working directory: {os.getcwd()}", flush=True)
print(f"DEBUG: EMULATOR mode: {os.environ.get('EMULATOR', 'false')}", flush=True)
# Additional debugging for plugin system (only in debug mode)
if debug_mode:
try:
plugin_system_path = os.path.join(project_dir, 'src', 'plugin_system')
if plugin_system_path not in sys.path:
sys.path.insert(0, plugin_system_path)
print(f"DEBUG: Added plugin_system path to sys.path: {plugin_system_path}", flush=True)
# Try to import the plugin system directly to get better error info
print("DEBUG: Attempting to import src.plugin_system...", flush=True)
from src.plugin_system import PluginManager
print("DEBUG: Plugin system import successful", flush=True)
except ImportError as e:
print(f"DEBUG: Plugin system import failed: {e}", flush=True)
print(f"DEBUG: Import error details: {type(e).__name__}", flush=True)
except Exception as e:
print(f"DEBUG: Unexpected error during plugin system import: {e}", flush=True)
# Configure logging before importing any other modules
# Use centralized logging configuration
from src.logging_config import setup_logging
log_level = logging.DEBUG if debug_mode else logging.INFO
format_type = 'readable' # Use 'json' for structured logging in production
setup_logging(level=log_level, format_type=format_type, include_location=debug_mode)
# Now import the display controller
from src.display_controller import main
if __name__ == "__main__":
main()