55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""mofin_collect.py — MoFin 数据采集链
|
|
|
|
每轮盯盘 cron 前运行,顺序执行:
|
|
1. market_watch — 拉90个行业板块数据(9:30前跳过,市场未开)
|
|
2. trend_detector — 检测17种信号(依赖板块数据,同跳)
|
|
3. mofin_news — 搜新闻+小果分析
|
|
"""
|
|
|
|
import subprocess, sys, time
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
|
|
BASE = Path(__file__).parent.parent if "hermes" in str(Path(__file__).resolve()) else Path(__file__).parent
|
|
|
|
now = datetime.now()
|
|
market_open = (now.hour >= 9 and now.minute >= 30) or now.hour >= 10
|
|
# 9:30前不跑市场数据采集(同花顺页面无数据)
|
|
# 但仍然跑新闻采集(不依赖市场是否开盘)
|
|
|
|
SCRIPTS = []
|
|
if market_open:
|
|
SCRIPTS.append(("market_watch.py", 60))
|
|
SCRIPTS.append(("trend_detector.py", 60))
|
|
else:
|
|
print(f"[{now.strftime('%H:%M')}] 市场未开盘(9:30),跳过板块采集", flush=True)
|
|
|
|
SCRIPTS.append(("mofin_news.py", 50))
|
|
|
|
for script, timeout in SCRIPTS:
|
|
path = BASE / script
|
|
if not path.exists():
|
|
path = Path("/home/hmo/MoFin") / script
|
|
print(f"--- {script} ---", flush=True)
|
|
start = time.time()
|
|
try:
|
|
result = subprocess.run(
|
|
[sys.executable, str(path)],
|
|
capture_output=True, text=True, timeout=timeout
|
|
)
|
|
elapsed = time.time() - start
|
|
if result.returncode == 0:
|
|
print(f"OK ({elapsed:.0f}s)", flush=True)
|
|
if result.stdout.strip():
|
|
for line in result.stdout.strip().split("\n")[-3:]:
|
|
print(f" {line}", flush=True)
|
|
else:
|
|
print(f"FAIL ({elapsed:.0f}s): {result.stderr[:200]}", flush=True)
|
|
except subprocess.TimeoutExpired:
|
|
print(f"TIMEOUT ({timeout}s)", flush=True)
|
|
except Exception as e:
|
|
print(f"ERROR: {e}", flush=True)
|
|
|
|
print("采集链完成", flush=True)
|