os/linux/ WaitingForStuffScripts


I have two simple scripts that allow me to say 'start task Y when task X is done', and to effectively make queues.

Usage:

lwn Task1 do_something with args
wfp Task2 Task1 do_something_else
wfp Task3 Task1 do_something_else_at_the_same_time
wfp Task4 Task2+Task3 do_something_after_tasks_2_and_3_are_done # wait for multiple processes, names separated by +

lwn (launch with name):

#!/usr/bin/env python
from setproctitle import setproctitle # python -m pip install setproctitle
from subprocess import run
import sys
args = sys.argv[1:]
if len(args) < 2:
  print(f"Not enough arguments")
  print(f"{sys.argv[0]} <process name> <command> [<args> ...]")
  exit(1)
title = args[0]
if len(title) > 15:
  title = title[:15]
  print(f"Truncating title to '{title}'")
setproctitle(args[0])
cmd = args[1:]
exit(run(cmd).returncode)

wfp (wait for process):

#!/usr/bin/env python
from setproctitle import setproctitle # pip install setproctitle
from subprocess import run
from pgrep import pgrep # pip install pgrep
from time import sleep
from sys import argv
from datetime import datetime
def now(fmt="%c"):
  return datetime.now().strftime(fmt)
try:
  me, myname, targetname, *cmd = argv
except ValueError:
  print(f"{argv[0]} <myname> <target_name> <cmd> [<args> ...]")
  exit(1)
def truncname(x):
  if len(x) > 15:
    x = x[:15]
    print(f"Truncating proc name to '{x}'")
  return x
targetnames = [truncname(x) for x in targetname.split("+")]
setproctitle(myname)
def pgreps(xs):
  return sum([pgrep(x) for x in xs],[])
while m := pgreps(targetnames):
  sleep(1)
  print(f"Waiting for {len(m)} process{'es' if len(m)>1 else ''}... {now()}",end="\r")
print()
if len(cmd) > 0:
  exit(run(cmd).returncode)
else:
  exit(0)