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)