Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import atexit
- import os
- import signal
- import subprocess
- import sys
- import threading
- import time
- class SignalException(Exception):
- ...
- pid = os.getpid()
- print("PID is", pid)
- def raiser(signal, *rest):
- raise SignalException(f"Got signal {signal}", signal)
- def kill(pid, sig, delay):
- time.sleep(delay)
- os.kill(pid, sig)
- if len(sys.argv) == 2:
- try:
- signal_value = int(sys.argv[1])
- except ValueError:
- try:
- sig = sys.argv[1].upper()
- signal_value = signal.Signals[sig]
- except KeyError:
- raise SystemExit("A valid signal number or signal name is required")
- try:
- signal_type = signal.Signals(signal_value)
- except ValueError:
- raise SystemExit("Signal is unkown")
- else:
- signal_value = None
- signal_type = None
- class Button:
- buttons = []
- def __init__(self, pin):
- self.pin = pin
- self.buttons.append(self)
- @classmethod
- def close_all(cls):
- for button in cls.buttons:
- print("Closing button", button.pin)
- button.close()
- def close(self):
- ...
- atexit.register(Button.close_all)
- [Button(x) for x in range(10)]
- if signal_type:
- # must be set in MainThread
- try:
- signal.signal(signal_type, raiser)
- except OSError:
- raise SystemExit("Invalid Signal")
- # Run a worker thread to signal myself.
- threading.Thread(target=kill, args=(pid, signal_type, 2), daemon=True).start()
- try:
- time.sleep(3600)
- except KeyboardInterrupt:
- print("Got CTRL+C")
- except SignalException as sig:
- print(sig.args[0])
- sys.exit(sig.args[1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement