#!/usr/bin/env python3 """ Скрипт компиляции .txt файлов обратно в .cst. Запускать из папки translate_util. Спрашивает, из какой папки брать .txt файлы (по умолчанию txt_translated) и в какую папку положить итоговые .cst (по умолчанию update01). mc.exe запускается из папки txt и кладёт результат (.cst) туда же, рядом с .txt. Скрипт копирует .txt файлы из исходной папки в txt, компилирует их, а затем переносит получившиеся .cst в целевую папку (перезаписывая существующие без вопросов). """ import shutil import subprocess import sys from pathlib import Path BASE_DIR = Path(__file__).resolve().parent TOOL_EXE = BASE_DIR / "tool" / "mc.exe" TXT_DIR = BASE_DIR / "txt" def main(): if not TOOL_EXE.exists(): print(f"Ошибка: не найден {TOOL_EXE}") sys.exit(1) src_input = input("Из какой папки брать .txt файлы? [txt_translated]: ").strip() src_dir_name = src_input if src_input else "txt_translated" src_dir = BASE_DIR / src_dir_name dst_input = input("В какую папку положить скомпилированные .cst? [update01]: ").strip() dst_dir_name = dst_input if dst_input else "update01" dst_dir = BASE_DIR / dst_dir_name if not src_dir.is_dir(): print(f"Ошибка: папка не найдена: {src_dir}") sys.exit(1) TXT_DIR.mkdir(exist_ok=True) dst_dir.mkdir(exist_ok=True) txt_files = sorted(src_dir.glob("*.txt")) if not txt_files: print(f"В папке {src_dir} не найдено .txt файлов.") sys.exit(0) print(f"Найдено файлов: {len(txt_files)}") print(f"Источник .txt: {src_dir}") print(f"Рабочая папка компиляции: {TXT_DIR}") print(f"Итоговая папка .cst: {dst_dir}\n") ok_count = 0 fail_count = 0 same_dir = src_dir.resolve().samefile(TXT_DIR.resolve()) if src_dir.exists() and TXT_DIR.exists() else False for txt_file in txt_files: working_txt = TXT_DIR / txt_file.name # Копируем исходный .txt в рабочую папку txt (перезаписываем, если есть), # если источник и есть txt — копировать не нужно if not same_dir: shutil.copy2(txt_file, working_txt) print(f"-> {txt_file.name}") try: result = subprocess.run( [str(TOOL_EXE), working_txt.name], cwd=str(TXT_DIR), capture_output=True, text=True, ) if result.stdout: print(result.stdout.strip()) if result.stderr: print(result.stderr.strip()) if result.returncode != 0: fail_count += 1 print(f" [!] Код возврата: {result.returncode}") continue compiled_cst = TXT_DIR / (working_txt.stem + ".cst") if not compiled_cst.exists(): fail_count += 1 print(f" [!] Ожидаемый файл не найден: {compiled_cst}") continue # Переносим результат в целевую папку, перезаписывая без вопросов dst_cst = dst_dir / compiled_cst.name shutil.move(str(compiled_cst), str(dst_cst)) ok_count += 1 except Exception as e: fail_count += 1 print(f" [!] Ошибка запуска: {e}") print(f"\nГотово. Успешно: {ok_count}, с ошибками: {fail_count}") if __name__ == "__main__": main()