From 60c4d231f8b3bb4e2123536307873b3d9676eecd Mon Sep 17 00:00:00 2001 From: Qubasa Date: Fri, 19 Jan 2024 13:56:17 +0100 Subject: [PATCH] Wrapped vm.run in cmd.run. Working --wayland --- pkgs/clan-cli/clan_cli/vms/run.py | 12 +--- .../clan_vm_manager/executor.py | 57 ------------------- 2 files changed, 3 insertions(+), 66 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/vms/run.py b/pkgs/clan-cli/clan_cli/vms/run.py index 65515ffee..37d716b04 100644 --- a/pkgs/clan-cli/clan_cli/vms/run.py +++ b/pkgs/clan-cli/clan_cli/vms/run.py @@ -2,8 +2,6 @@ import argparse import json import logging import os -import shlex -import subprocess import sys import tempfile from dataclasses import dataclass, field @@ -235,16 +233,12 @@ def run_vm( "XDG_DATA_DIRS" ] = f"{remote_viewer_mimetypes}:{env.get('XDG_DATA_DIRS', '')}" - print("$ " + shlex.join(qemu_cmd)) - res = subprocess.run( + run( nix_shell(packages, qemu_cmd), env=env, - check=False, - stdout=log_fd, - stderr=log_fd, + log=Log.BOTH, + error_msg=f"Could not start vm {machine}", ) - if res.returncode != 0: - raise ClanError(f"qemu failed with {res.returncode}") @dataclass diff --git a/pkgs/clan-vm-manager/clan_vm_manager/executor.py b/pkgs/clan-vm-manager/clan_vm_manager/executor.py index 3845c57c1..4cd02de3c 100644 --- a/pkgs/clan-vm-manager/clan_vm_manager/executor.py +++ b/pkgs/clan-vm-manager/clan_vm_manager/executor.py @@ -2,7 +2,6 @@ import os import signal import sys import traceback -import weakref from pathlib import Path from typing import Any @@ -134,59 +133,3 @@ def spawn( mp_proc = MPProcess(name=proc_name, proc=proc, out_file=out_file) return mp_proc - - -# Processes are killed when the ProcessManager is garbage collected -class ProcessManager: - def __init__(self) -> None: - self.procs: dict[str, MPProcess] = dict() - self._finalizer = weakref.finalize(self, self.kill_all) - - def by_pid(self, pid: int) -> tuple[str, MPProcess] | None: - for ident, proc in self.procs.items(): - if proc.proc.pid == pid: - return (ident, proc) - return None - - def by_proc(self, proc: mp.process.BaseProcess) -> tuple[str, MPProcess] | None: - if proc.pid is None: - return None - return self.by_pid(pid=proc.pid) - - def running_procs(self) -> list[str]: - alive_procs = filter(lambda pair: pair[1].proc.is_alive(), self.procs.items()) - self.procs = dict(alive_procs) - return list(self.procs.keys()) - - def spawn( - self, - *, - ident: str, - log_path: Path, - on_except: Callable[[Exception, mp.process.BaseProcess], None], - func: Callable, - **kwargs: Any, - ) -> MPProcess: - proc = spawn( - log_path=log_path, - on_except=on_except, - func=func, - **kwargs, - ) - if ident in self.procs: - raise ClanError(f"Process with id {ident} already exists") - self.procs[ident] = proc - return proc - - def kill_all(self) -> None: - print("Killing all processes", file=sys.stderr) - for proc in self.procs.values(): - proc.kill_group() - self.procs.clear() - - def kill(self, ident: str) -> None: - if ident not in self.procs: - raise ClanError(f"Process with id {ident} does not exist") - proc = self.procs[ident] - proc.kill_group() - del self.procs[ident]