146 lines
4.6 KiB
Python
146 lines
4.6 KiB
Python
#!/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())
|