Advertisement
Guest User

guard.py

a guest
Mar 31st, 2021
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.61 KB | None | 0 0
  1.  
  2. import atexit
  3. import os
  4. import signal
  5. import subprocess
  6. import sys
  7. import threading
  8. import time
  9.  
  10.  
  11. class SignalException(Exception):
  12.     ...
  13.  
  14.  
  15. pid = os.getpid()
  16. print("PID is", pid)
  17.  
  18.  
  19. def raiser(signal, *rest):
  20.     raise SignalException(f"Got signal {signal}", signal)
  21.  
  22.  
  23. def kill(pid, sig, delay):
  24.     time.sleep(delay)
  25.     os.kill(pid, sig)
  26.  
  27.  
  28. if len(sys.argv) == 2:
  29.     try:
  30.         signal_value = int(sys.argv[1])
  31.     except ValueError:
  32.         try:
  33.             sig = sys.argv[1].upper()
  34.             signal_value = signal.Signals[sig]
  35.         except KeyError:
  36.             raise SystemExit("A valid signal number or signal name is required")
  37.  
  38.     try:
  39.         signal_type = signal.Signals(signal_value)
  40.     except ValueError:
  41.         raise SystemExit("Signal is unkown")
  42. else:
  43.     signal_value = None
  44.     signal_type = None
  45.  
  46.  
  47. class Button:
  48.     buttons = []
  49.  
  50.     def __init__(self, pin):
  51.         self.pin = pin
  52.         self.buttons.append(self)
  53.  
  54.     @classmethod
  55.     def close_all(cls):
  56.         for button in cls.buttons:
  57.             print("Closing button", button.pin)
  58.             button.close()
  59.  
  60.     def close(self):
  61.         ...
  62.  
  63.  
  64. atexit.register(Button.close_all)
  65. [Button(x) for x in range(10)]
  66.  
  67. if signal_type:
  68.     # must be set in MainThread
  69.     try:
  70.         signal.signal(signal_type, raiser)
  71.     except OSError:
  72.         raise SystemExit("Invalid Signal")
  73.  
  74.  
  75.     # Run a worker thread to signal myself.
  76.     threading.Thread(target=kill, args=(pid, signal_type, 2), daemon=True).start()
  77.  
  78. try:
  79.     time.sleep(3600)
  80. except KeyboardInterrupt:
  81.     print("Got CTRL+C")
  82. except SignalException as sig:
  83.     print(sig.args[0])
  84.     sys.exit(sig.args[1])
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement