163 lines
5.2 KiB
Python
163 lines
5.2 KiB
Python
"""
|
||
统一的医疗报告生成脚本运行器
|
||
|
||
使用方法:
|
||
# 使用 extract_and_fill_report.py(推荐 - 功能完整)
|
||
python run_report_generation.py --method extract
|
||
|
||
# 使用 fill_with_docxtpl.py(简单模板填充)
|
||
python run_report_generation.py --method docxtpl
|
||
|
||
# 强制重新提取(不使用缓存)
|
||
python run_report_generation.py --method extract --force
|
||
|
||
# 使用DeepSeek分析
|
||
python run_report_generation.py --method extract --deepseek
|
||
|
||
# 指定DeepSeek API Key
|
||
python run_report_generation.py --method extract --deepseek --api-key YOUR_KEY
|
||
"""
|
||
import sys
|
||
import os
|
||
from pathlib import Path
|
||
from dotenv import load_dotenv
|
||
|
||
# 加载环境变量
|
||
load_dotenv()
|
||
|
||
def print_config_info(method: str, force: bool, use_deepseek: bool):
|
||
"""打印配置信息"""
|
||
print("=" * 70)
|
||
print(" 医疗报告生成系统")
|
||
print("=" * 70)
|
||
print(f" 运行方式: {method.upper()}")
|
||
print(f" 强制刷新: {'是' if force else '否(使用缓存)'}")
|
||
print(f" DeepSeek分析: {'启用 [OK]' if use_deepseek else '关闭'}")
|
||
|
||
# 检查关键文件
|
||
base_dir = Path(__file__).parent
|
||
template_complete = base_dir / "template_complete.docx"
|
||
template_docxtpl = Path(__file__).parent.parent / "template_docxtpl.docx"
|
||
config_file = base_dir / "abb_mapping_config.json"
|
||
|
||
print(f"\n 关键文件检查:")
|
||
print(f" - 模板文件 (extract): {'[OK] 存在' if template_complete.exists() else '[X] 缺失'}")
|
||
print(f" - 模板文件 (docxtpl): {'[OK] 存在' if template_docxtpl.exists() else '[X] 缺失'}")
|
||
print(f" - 配置文件: {'[OK] 存在' if config_file.exists() else '[X] 缺失'}")
|
||
|
||
if use_deepseek:
|
||
deepseek_key = os.environ.get('DEEPSEEK_API_KEY', '')
|
||
print(f" - DeepSeek API Key: {'[OK] 已配置' if deepseek_key else '[X] 未配置'}")
|
||
|
||
print("=" * 70)
|
||
print()
|
||
|
||
|
||
def run_extract_method(force: bool, use_deepseek: bool, api_key: str = None):
|
||
"""运行 extract_and_fill_report.py 方法"""
|
||
try:
|
||
from extract_and_fill_report import main as extract_main
|
||
extract_main(force_extract=force, use_deepseek=use_deepseek, deepseek_api_key=api_key)
|
||
except ImportError as e:
|
||
print(f"[ERROR] 导入失败: {e}")
|
||
print(" 请确保 extract_and_fill_report.py 文件存在")
|
||
sys.exit(1)
|
||
except Exception as e:
|
||
print(f"[ERROR] 运行失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
sys.exit(1)
|
||
|
||
|
||
def run_docxtpl_method():
|
||
"""运行 fill_with_docxtpl.py 方法"""
|
||
try:
|
||
from fill_with_docxtpl import main as docxtpl_main
|
||
docxtpl_main()
|
||
except ImportError as e:
|
||
print(f"[ERROR] 导入失败: {e}")
|
||
print(" 请确保 fill_with_docxtpl.py 文件存在")
|
||
sys.exit(1)
|
||
except Exception as e:
|
||
print(f"[ERROR] 运行失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
sys.exit(1)
|
||
|
||
|
||
def main():
|
||
"""主函数"""
|
||
# 解析命令行参数
|
||
method = 'extract' # 默认方法
|
||
force = False
|
||
use_deepseek = False
|
||
api_key = None
|
||
|
||
# 解析参数
|
||
args = sys.argv[1:]
|
||
i = 0
|
||
while i < len(args):
|
||
arg = args[i]
|
||
|
||
if arg in ['--method', '-m']:
|
||
if i + 1 < len(args):
|
||
method = args[i + 1]
|
||
i += 2
|
||
else:
|
||
print("[ERROR] --method 参数需要指定值: extract 或 docxtpl")
|
||
sys.exit(1)
|
||
elif arg in ['--force', '-f']:
|
||
force = True
|
||
i += 1
|
||
elif arg in ['--deepseek', '-d']:
|
||
use_deepseek = True
|
||
i += 1
|
||
elif arg in ['--api-key', '-k']:
|
||
if i + 1 < len(args):
|
||
api_key = args[i + 1]
|
||
i += 2
|
||
else:
|
||
print("[ERROR] --api-key 参数需要指定API Key")
|
||
sys.exit(1)
|
||
elif arg in ['--help', '-h']:
|
||
print(__doc__)
|
||
sys.exit(0)
|
||
else:
|
||
print(f"[ERROR] 未知参数: {arg}")
|
||
print(" 使用 --help 查看帮助信息")
|
||
sys.exit(1)
|
||
|
||
# 如果没有指定API Key,尝试从环境变量获取
|
||
if use_deepseek and not api_key:
|
||
api_key = os.environ.get('DEEPSEEK_API_KEY', '')
|
||
if not api_key:
|
||
print("[WARNING] 使用DeepSeek需要提供API Key")
|
||
print(" 方法1: 设置环境变量 DEEPSEEK_API_KEY")
|
||
print(" 方法2: 使用参数 --api-key YOUR_KEY")
|
||
sys.exit(1)
|
||
|
||
# 验证方法
|
||
if method not in ['extract', 'docxtpl']:
|
||
print(f"[ERROR] 未知的方法: {method}")
|
||
print(" 支持的方法: extract, docxtpl")
|
||
sys.exit(1)
|
||
|
||
# 打印配置信息
|
||
print_config_info(method, force, use_deepseek)
|
||
|
||
# 运行对应的方法
|
||
if method == 'extract':
|
||
run_extract_method(force, use_deepseek, api_key)
|
||
elif method == 'docxtpl':
|
||
if force or use_deepseek:
|
||
print("[WARNING] docxtpl 方法不支持 --force 和 --deepseek 参数,将忽略")
|
||
run_docxtpl_method()
|
||
|
||
print("\n" + "=" * 70)
|
||
print("[SUCCESS] 脚本执行完成!")
|
||
print("=" * 70)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|