From 0b44d2af973250008f477dd1834e06df9d1fc2a1 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 23 Jun 2021 15:13:37 +0200 Subject: bin: add udev_match Installed in the desktop profile. --- bin/udev_match | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 bin/udev_match (limited to 'bin') diff --git a/bin/udev_match b/bin/udev_match new file mode 100755 index 0000000..de51650 --- /dev/null +++ b/bin/udev_match @@ -0,0 +1,39 @@ +#!/usr/bin/python3 + +import argparse +import subprocess + +parser = argparse.ArgumentParser(description = 'Run a command on matching udev events') + +parser.add_argument('-s', '--subsystem') +parser.add_argument('-m', '--match', action = 'append') + +parser.add_argument('command') + +args = parser.parse_args() + +def process_buf(buf): + for m in args.match: + if not m in buf: + return + subprocess.run(args.command, shell = True) + +cmdline = ['udevadm', 'monitor', '--property'] +if args.subsystem: + cmdline.append('--subsystem-match=' + args.subsystem) + +child = subprocess.Popen(cmdline, text = True, stdout = subprocess.PIPE) + +# skip first three lines +[child.stdout.readline() for i in range(3)] + +buf = [] + +while child.poll() is None: + line = child.stdout.readline().strip() + if not line: + process_buf(buf) + buf.clear() + continue + + buf.append(line) -- cgit v1.2.3