From 57798f843e6ef091308bfc3068db166ed21dcd10 Mon Sep 17 00:00:00 2001 From: ZFordDev Date: Mon, 21 Sep 2026 14:12:36 +1000 Subject: [PATCH 1/3] update nvidia sensors to hide process window | updated test core to account --- src/core/sensors.py | 13 +++++++++---- tests/test_core.py | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/core/sensors.py b/src/core/sensors.py index dcf43a2..9f67da3 100644 --- a/src/core/sensors.py +++ b/src/core/sensors.py @@ -74,12 +74,17 @@ def _gpu(self) -> dict[str, float | None]: """Read NVIDIA CLI metrics, then vendor-neutral Windows counters.""" if self._nvidia_smi: try: + run_options = { + "capture_output": True, + "check": True, + "text": True, + "timeout": 2, + } + if platform.system() == "Windows": + run_options["creationflags"] = subprocess.CREATE_NO_WINDOW result = subprocess.run( ["nvidia-smi", "--query-gpu=utilization.gpu,temperature.gpu", "--format=csv,noheader,nounits"], - capture_output=True, - check=True, - text=True, - timeout=2, + **run_options, ) usage, temperature = result.stdout.splitlines()[0].split(",", maxsplit=1) self._gpu_values = {"usage": float(usage.strip()), "temperature": float(temperature.strip())} diff --git a/tests/test_core.py b/tests/test_core.py index c37ed39..4d34d43 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -144,6 +144,26 @@ def test_nvidia_smi_path_is_resolved_once(monkeypatch): assert len(calls) == 1 +def test_nvidia_smi_suppresses_console_only_on_windows(monkeypatch): + import src.core.sensors as sensors_module + + reader = SensorReader() + reader._nvidia_smi = "nvidia-smi" + completed = Mock(stdout="40, 55\n") + run = Mock(return_value=completed) + monkeypatch.setattr(sensors_module.subprocess, "run", run) + monkeypatch.setattr(sensors_module.platform, "system", lambda: "Windows") + monkeypatch.setattr(sensors_module.subprocess, "CREATE_NO_WINDOW", 0x08000000, raising=False) + + assert reader._gpu() == {"usage": 40.0, "temperature": 55.0} + assert run.call_args.kwargs["creationflags"] == 0x08000000 + + run.reset_mock() + monkeypatch.setattr(sensors_module.platform, "system", lambda: "Linux") + assert reader._gpu() == {"usage": 40.0, "temperature": 55.0} + assert "creationflags" not in run.call_args.kwargs + + def test_get_all_skips_heavy_probes_after_stop(): import threading From ca248470358a2f354fcabceb776fd0dcd97dfea5 Mon Sep 17 00:00:00 2001 From: ZFordDev Date: Tue, 22 Sep 2026 21:10:45 +1000 Subject: [PATCH 2/3] version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 65f545d..c717b91 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "glint-monitor" -version = "1.0.2" +version = "1.0.3" description = "A Modern Painter-Rendered Desktop System Monitor" readme = "README.md" requires-python = ">=3.10" From a1cff73c2f3ae1a3c854db28de3a8c69b0b1b922 Mon Sep 17 00:00:00 2001 From: ZFordDev Date: Tue, 22 Sep 2026 21:17:18 +1000 Subject: [PATCH 3/3] check=True is now passed explicitly to subprocess.run instead of via **run_options --- src/core/sensors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/sensors.py b/src/core/sensors.py index 9f67da3..c14e832 100644 --- a/src/core/sensors.py +++ b/src/core/sensors.py @@ -76,7 +76,6 @@ def _gpu(self) -> dict[str, float | None]: try: run_options = { "capture_output": True, - "check": True, "text": True, "timeout": 2, } @@ -84,6 +83,7 @@ def _gpu(self) -> dict[str, float | None]: run_options["creationflags"] = subprocess.CREATE_NO_WINDOW result = subprocess.run( ["nvidia-smi", "--query-gpu=utilization.gpu,temperature.gpu", "--format=csv,noheader,nounits"], + check=True, **run_options, ) usage, temperature = result.stdout.splitlines()[0].split(",", maxsplit=1)