#!/usr/bin/env bash # JUC500 GUI 실행 (인자 없으면 GUI, 있으면 CLI로 전달) set -euo pipefail ROOT="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT" if [[ -x "$ROOT/.venv/bin/python" ]]; then PY="$ROOT/.venv/bin/python" elif command -v python3 >/dev/null 2>&1; then PY="$(command -v python3)" else echo "Python3 가 없습니다. 먼저 설치하세요:" >&2 echo " ./scripts/setup_macos.sh" >&2 exit 1 fi if [[ ! -x "$ROOT/.venv/bin/python" ]]; then echo "경고: .venv 없음 — 시스템 Python 사용. 문제가 있으면 ./scripts/setup_macos.sh" >&2 fi export PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}" # 의존성 빠른 확인 if ! "$PY" -c "import usb" 2>/dev/null; then echo "pyusb 가 없습니다. 먼저 설치하세요:" >&2 echo " ./scripts/setup_macos.sh" >&2 exit 1 fi # 이전 GUI 인스턴스 종료 (옛 코드가 포트 8765를 붙잡고 있으면 같은 에러가 반복됨) if command -v pgrep >/dev/null 2>&1; then OLD_PIDS="$(pgrep -f "$ROOT/juc500_app.py" || true)" if [[ -n "${OLD_PIDS}" ]]; then echo "이전 JUC500 프로세스 종료: ${OLD_PIDS}" # shellcheck disable=SC2086 kill ${OLD_PIDS} 2>/dev/null || true sleep 0.4 # shellcheck disable=SC2086 kill -9 ${OLD_PIDS} 2>/dev/null || true fi fi # 캐시된 .pyc 가 헷갈리지 않도록 (경량) rm -rf "$ROOT/juc500_xfer/__pycache__" 2>/dev/null || true REV="$("$PY" -c "from juc500_xfer import __version__; from juc500_xfer.usb_link import Juc500Link; print(__version__, 'backend_io=' + str(hasattr(Juc500Link, '_backend_bulk_write')))")" echo "JUC500 start — ${REV}" exec "$PY" "$ROOT/juc500_app.py" "$@"