#!/usr/bin/env python3 """ Program do przetwarzania wielu rejestracji COMTRADE Przeszukuje rekurencyjnie podkatalogi i uruchamia tester dla kazdej rejestracji """ import os import sys import shutil import subprocess def find_comtrade_files(root_dir): """Znajduje wszystkie pliki .CFG w podkatalogach""" cfg_files = [] for root, dirs, files in os.walk(root_dir): for file in files: if file.upper().endswith('.CFG'): cfg_path = os.path.join(root, file) dat_file = cfg_path[:-4] + '.DAT' if os.path.exists(dat_file): cfg_files.append(cfg_path) return cfg_files def process_recording(cfg_file, tester_script): """Przetwarza pojedyncza rejestracje""" dir_name = os.path.dirname(cfg_file) file_name = os.path.basename(cfg_file)[:-4] print(f"\n{'='*60}") print(f"Przetwarzanie: {file_name}") print(f"Katalog: {dir_name}") print('='*60) original_dir = os.getcwd() os.chdir(dir_name) try: result = subprocess.run( [sys.executable, tester_script, file_name], capture_output=True, text=True, timeout=120 ) if result.returncode == 0: print(f"OK - wynik zapisany w {dir_name}") # Przenies wynik PNG if os.path.exists('test_result.png'): output_name = f'{file_name}_result.png' if os.path.exists(output_name): os.remove(output_name) shutil.move('test_result.png', output_name) print(f"Zapisano: {output_name}") # Przenies rezultat.md if os.path.exists('rezultat.md'): output_md = f'{file_name}_rezultat.md' if os.path.exists(output_md): os.remove(output_md) shutil.move('rezultat.md', output_md) print(f"Zapisano: {output_md}") else: print(f"BLED przetwarzania:") print(result.stderr) except subprocess.TimeoutExpired: print(f"BLED - przekroczony czas wykonania") except Exception as e: print(f"BLED - {str(e)}") finally: os.chdir(original_dir) def main(): if len(sys.argv) > 1: root_dir = sys.argv[1] else: root_dir = os.getcwd() tester_script = os.path.join(os.getcwd(), 'tester.py') if not os.path.exists(tester_script): print(f"BLED: Nie znaleziono {tester_script}") sys.exit(1) print(f"Szukanie rejestracji COMTRADE w: {root_dir}") cfg_files = find_comtrade_files(root_dir) if not cfg_files: print("NIE ZNALEZIONO zadnych rejestracji COMTRADE") sys.exit(0) print(f"ZNALEZIONO {len(cfg_files)} rejestracji") for i, cfg_file in enumerate(cfg_files, 1): print(f"\n[{i}/{len(cfg_files)}]") process_recording(cfg_file, tester_script) print(f"\n{'='*60}") print("ZAKONCZONO przetwarzanie wszystkich rejestracji") print('='*60) if __name__ == '__main__': main()