57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
# worker.py
|
|
import subprocess
|
|
import time
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
TITLE = "TCP_SPLITTER"
|
|
SPLITTER_EXE_NAME = "tcp_splitter.exe"
|
|
CONFIG_NAME = "config.json"
|
|
|
|
# Windows creation flag: create child in a new console window
|
|
CREATE_NEW_CONSOLE = 0x00000010
|
|
|
|
def base_dir() -> Path:
|
|
# When frozen by PyInstaller, sys.executable is the EXE path
|
|
return Path(sys.executable).parent if getattr(sys, "frozen", False) else Path(__file__).resolve().parent
|
|
|
|
def launch() -> subprocess.Popen:
|
|
base = base_dir()
|
|
splitter = base / SPLITTER_EXE_NAME
|
|
cfg = base / CONFIG_NAME
|
|
|
|
if not splitter.exists():
|
|
raise FileNotFoundError(f"Cannot find {splitter}")
|
|
if not cfg.exists():
|
|
raise FileNotFoundError(f"Cannot find {cfg}")
|
|
|
|
# Launch tcp_splitter.exe with its own console and a readable title
|
|
args = [str(splitter), "--config", str(cfg), "--title", TITLE]
|
|
proc = subprocess.Popen(args, creationflags=CREATE_NEW_CONSOLE)
|
|
return proc
|
|
|
|
def main():
|
|
while True:
|
|
start_ts = time.strftime("%Y-%m-%d %H:%M:%S")
|
|
print(f"[worker] Starting splitter at {start_ts}")
|
|
try:
|
|
proc = launch()
|
|
except Exception as e:
|
|
print(f"[worker] Launch error: {e}")
|
|
time.sleep(3)
|
|
continue
|
|
|
|
# Poll until it exits; restart on exit
|
|
while True:
|
|
rc = proc.poll()
|
|
if rc is not None:
|
|
end_ts = time.strftime("%Y-%m-%d %H:%M:%S")
|
|
print(f"[worker] Splitter exited (code {rc}) at {end_ts}. Restarting…")
|
|
time.sleep(1)
|
|
break
|
|
time.sleep(1)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|