# R2BID for ROS sending from UDP to RDRC server # # The file must be located in ROS catalog... # Check the path and file name adif in ROS import threading import socket import subprocess import configparser from time import sleep from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler address_to_send = ('213.129.114.147', 52001) address_to_send_localhost = ('127.0.0.1', 12060) StartSt = '' QSO_DATE = '' QSO_DATE_OFF = '' STATION_CALLSIGN = '' print('--- ROS UDP transmit services.') print('--- Special for RDRC (c) R2BID, RW6AVK, R3KEE 2024.\n') config = configparser.ConfigParser() config.read("ROS.ini") LOGFILENAME = (config['Log']['Directorio ADIF']) print('Your log file ' + LOGFILENAME) ST_CAL = (config['Operador']['Callsign']) STATION_CALLSIGN = '' + ST_CAL def readlogstr(lstr): global StartSt global QSO_DATE global QSO_DATE_OFF global STATION_CALLSIGN if '' in lstr: QSO_DATE = lstr[12 : 20] QSO_DATE_OFF = '' + QSO_DATE + ' ' StartSt = StartSt + lstr.strip() + ' ' + QSO_DATE_OFF.strip() + ' ' elif '' in lstr: StartSt = StartSt + STATION_CALLSIGN + ' ' + lstr.strip() print("Send to RDRC server:") # print("Send to LOCALHOST") print(StartSt) clientudp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) clientudp.sendto(StartSt.encode(), address_to_send) # clientudp.sendto(StartSt.encode(), address_to_send_localhost) else: StartSt = StartSt + lstr.strip() + ' ' class MyHandler(FileSystemEventHandler): def on_modified(self, evnt): global lastLine lin = logFile.readline() while lin: lastLine += 1 readlogstr(lin.strip()) lin = logFile.readline() def check_file(): global callarray, barray, logFile, lastLine logFile = open(LOGFILENAME, 'r') lastLine = 0 line = logFile.readline() while line: lastLine += 1 if lastLine > 1: line = logFile.readline() event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path='./', recursive=False) observer.start() while True: try: sleep(1) except KeyboardInterrupt: observer.stop() exit(0) if __name__ == '__main__': proc = subprocess.Popen("ROS v7.4.0.exe", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True) try: logFile = open(LOGFILENAME, 'r') except: exit(0) logFile.close() event = threading.Event() t = threading.Thread(target=check_file) t.start() event.set() # while True: # poll = proc.poll() # Проверяем запущен ли .ехе # time.sleep(1) # if poll == 1: # Если НЕ запущен/закрыт # os.kill(os.getppid(), signal.CTRL_C_EVENT) # Закрываем окно скрипта # print('Script finished, close window ')