summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2021-10-08 20:57:53 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2021-10-13 19:43:07 +0100
commit630c7ffc4605f7c166d4e86d4147f9e3747e8cbd (patch)
treed11861769600f17519054cb281b329a1a2ff3fe4
parent6e72eae061dd88ff6d871a6c9d657569b03888fa (diff)
downloadsubplot-630c7ffc4605f7c166d4e86d4147f9e3747e8cbd.tar.gz
daemon: Support finding the binary on the PATH
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
-rw-r--r--share/python/lib/daemon.py15
1 files changed, 14 insertions, 1 deletions
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()