From 630c7ffc4605f7c166d4e86d4147f9e3747e8cbd Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Fri, 8 Oct 2021 20:57:53 +0100 Subject: daemon: Support finding the binary on the PATH Signed-off-by: Daniel Silverstone --- share/python/lib/daemon.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/share/python/lib/daemon.py b/share/python/lib/daemon.py index 9f1dfc0..1d0d443 100644 --- a/share/python/lib/daemon.py +++ b/share/python/lib/daemon.py @@ -25,7 +25,7 @@ def daemon_start_on_port(ctx, path=None, args=None, name=None, port=None, env=No # Start a daemon after a little wait. This is used only for testing the # port-waiting code. def _daemon_start_soonish(ctx, path=None, args=None, name=None, port=None, env=None): - _daemon_start(ctx, path=os.path.abspath(path), args=args, name=name, env=env) + _daemon_start(ctx, path=path, args=args, name=name, env=env) daemon = ctx.declare("_daemon") # Store the PID of the process we just started so that _daemon_stop_soonish @@ -53,6 +53,18 @@ def _daemon_stop_soonish(ctx, path=None, args=None, name=None, port=None, env=No logging.warning("Process did not actually exist (anymore?)") +# Find a binary akin to the `which` or `whereis` command +def _daemon_whereis(path): + if "/" in path: + logging.debug(f"Not using PATH for daemon {path}") + return path + for prefix in os.environ["PATH"].split(":"): + absolute = os.path.join(prefix, path) + logging.debug(f"Checking for {absolute}") + if os.access(absolute, os.X_OK) and os.path.isfile(absolute): + return absolute + return path + # Start a daeamon, get its PID. Don't wait for a port or anything. This is # meant for background processes that don't have port. Useful for testing the # lib/daemon library of Subplot, but not much else. @@ -63,6 +75,7 @@ def _daemon_start(ctx, path=None, args=None, name=None, env=None): runcmd_get_stderr = globals()["runcmd_get_stderr"] runcmd_prepend_to_path = globals()["runcmd_prepend_to_path"] + path = _daemon_whereis(path) path = os.path.abspath(path) argv = [path] + args.split() -- cgit v1.2.1