#!/usr/bin/env python3 """ 运行temperature_table.py的辅助脚本 自动设置正确的环境变量并运行脚本 """ import os import json import subprocess import sys from datetime import datetime, timezone, timedelta def load_influx_config(): """从default.json加载InfluxDB配置""" config_path = os.path.join(os.path.dirname(__file__), "default.json") try: with open(config_path, 'r', encoding='utf-8') as f: config = json.load(f) return config.get('influx', {}) except Exception as e: print(f"加载配置文件失败: {e}") return {} def convert_local_to_utc(local_time_str): """将本地时间转换为UTC时间 Args: local_time_str: 本地时间字符串,格式如 "2025-11-27T11:30:00" Returns: UTC时间字符串,格式如 "2025-11-27T03:30:00Z" """ try: # 解析本地时间(假设是UTC+8) local_dt = datetime.fromisoformat(local_time_str) # 添加UTC+8时区信息 local_dt = local_dt.replace(tzinfo=timezone(timedelta(hours=8))) # 转换为UTC utc_dt = local_dt.astimezone(timezone.utc) # 格式化为ISO字符串 return utc_dt.strftime('%Y-%m-%dT%H:%M:%SZ') except Exception as e: print(f"时间转换失败: {e}") return local_time_str def run_temperature_table(start_time, end_time): """运行temperature_table.py脚本 Args: start_time: 实验开始时间(本地时间),如 "2025-11-27T11:30:00" end_time: 实验结束时间(本地时间),如 "2025-11-27T12:00:00" """ print("运行 temperature_table.py 脚本") print("=" * 50) # 加载InfluxDB配置 influx_config = load_influx_config() if not influx_config: print("错误: 无法加载InfluxDB配置") return False # 转换时间为UTC utc_start = convert_local_to_utc(start_time) utc_end = convert_local_to_utc(end_time) print(f"本地时间: {start_time} → {end_time}") print(f"UTC时间: {utc_start} → {utc_end}") print() # 设置环境变量 env = os.environ.copy() env.update({ 'INFLUX_URL': influx_config.get('url', ''), 'INFLUX_ORG': influx_config.get('org', ''), 'INFLUX_TOKEN': influx_config.get('token', ''), 'INFLUX_BUCKET': influx_config.get('bucket', 'PCM'), 'INFLUX_MEASUREMENT': influx_config.get('measurement', 'PCM_Measurement'), 'EXPERIMENT_START': utc_start, 'EXPERIMENT_END': utc_end, 'TABLE_LOG_LEVEL': 'DEBUG', 'TABLE_LOG_FILE': 'temperature_table.log' }) print("环境变量设置:") for key in ['INFLUX_URL', 'INFLUX_ORG', 'INFLUX_BUCKET', 'INFLUX_MEASUREMENT', 'EXPERIMENT_START', 'EXPERIMENT_END']: value = env[key] if key == 'INFLUX_TOKEN': value = value[:8] + '****' if len(value) > 8 else '****' print(f" {key}: {value}") print() # 运行脚本 script_path = os.path.join(os.path.dirname(__file__), "temperature_table.py") try: print("正在运行脚本...") result = subprocess.run( [sys.executable, script_path], env=env, capture_output=True, text=True, timeout=60 ) print(f"返回码: {result.returncode}") if result.stdout: print("\n脚本输出:") print(result.stdout) if result.stderr: print("\n错误输出:") print(result.stderr) # 显示日志文件最后几行 log_file = "temperature_table.log" if os.path.exists(log_file): print(f"\n日志文件最后10行:") with open(log_file, 'r', encoding='utf-8') as f: lines = f.readlines() for line in lines[-10:]: print(f" {line.strip()}") return result.returncode == 0 except subprocess.TimeoutExpired: print("错误: 脚本运行超时") return False except Exception as e: print(f"错误: 运行脚本失败: {e}") return False def main(): if len(sys.argv) != 3: print("用法: python run_temperature_table.py <开始时间> <结束时间>") print("示例: python run_temperature_table.py 2025-11-27T11:30:00 2025-11-27T12:00:00") return 1 start_time = sys.argv[1] end_time = sys.argv[2] success = run_temperature_table(start_time, end_time) return 0 if success else 1 if __name__ == "__main__": sys.exit(main())