From c9829683101fff5c71e8075f8a213669a75a247d Mon Sep 17 00:00:00 2001 From: Padawan-GM Date: Wed, 17 Dec 2025 17:40:04 +0100 Subject: [PATCH] Set ProcessController's process file descriptors to None, and renamed START_COMMAND to START_COMMAND_FILE to load start command from a file --- config.py | 2 +- controllers.py | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/config.py b/config.py index cfdd9b6..34ba692 100644 --- a/config.py +++ b/config.py @@ -4,7 +4,7 @@ from dotenv import dotenv_values class Config: data = dotenv_values() MINECRAFTD_PASSWORD: str | None = data.get("MINECRAFTD_PASSWORD") - START_COMMAND: str = data.get("START_COMMAND") or "python proc.py" + START_COMMAND_FILE: str = data.get("START_COMMAND_FILE") or "start.sh" SERVER_HOST: str = data.get("SERVER_HOST") or "localhost" SERVER_PORT: int = int(data.get("SERVER_PORT") or 25565) SERVER_RCON_PORT: int = int(data.get("SERVER_RCON_PORT") or 25575) diff --git a/controllers.py b/controllers.py index 1156131..03ef9ef 100644 --- a/controllers.py +++ b/controllers.py @@ -1,21 +1,24 @@ import shlex from collections import deque from pathlib import Path -from subprocess import PIPE, Popen +from subprocess import Popen from threading import Lock from time import sleep from typing import Literal +from mcrcon import MCRcon +from mcstatus import JavaServer + from classes import ProcessStatus, ServerStatus from config import Config from logs import logger -from mcrcon import MCRcon -from mcstatus import JavaServer class ProcessController: def __init__(self): - self.start_command: list[str] = shlex.split(Config.START_COMMAND) + self.start_command: list[str] = shlex.split( + Path(Config.START_COMMAND_FILE).read_text() + ) self.process: Popen | None = None self.last_status: Literal[ProcessStatus.STOPPED, ProcessStatus.CRASHED] = ( ProcessStatus.STOPPED @@ -36,8 +39,10 @@ class ProcessController: self.process = Popen( self.start_command, - stdout=PIPE, - stderr=PIPE, + stdout=None, + stderr=None, + stdin=None, + start_new_session=True, ) logger.info( "ProcessController.start() - Started process with PID: %s",