fix: Unregister signal handlers while waiting for intervals. Closes #9.

This commit is contained in:
Alexandre Beaulieu
2019-10-01 11:19:29 -04:00
parent 0838df444a
commit 4ca59302ea
2 changed files with 22 additions and 8 deletions
+12 -3
View File
@@ -137,6 +137,13 @@ class Atomizer:
def shutdown(self):
self.sprayer.shutdown()
def add_handlers(loop, callback):
for sig in (signal.SIGINT, signal.SIGTERM):
loop.add_signal_handler(sig, callback)
def remove_handlers(loop):
for sig in (signal.SIGINT, signal.SIGTERM):
loop.remove_signal_handler(sig)
if __name__ == "__main__":
args = docopt(__doc__, version="1.0.0dev")
@@ -166,8 +173,7 @@ if __name__ == "__main__":
atomizer.imap(args['--targetPort'])
if not args['--recon']:
for sig in (signal.SIGINT, signal.SIGTERM):
loop.add_signal_handler(sig, atomizer.shutdown)
add_handlers(loop, atomizer.shutdown)
if args['--interval']:
popped_accts = 0
@@ -192,7 +198,10 @@ if __name__ == "__main__":
password = passwordfile.readline()
if password:
countdown_timer(*args['--interval'].split(':'))
remove_handlers(loop) # Intercept signals.
# Wait for next interval and abort if the user hits Ctrl-C.
if not countdown_timer(*args['--interval'].split(':')): break
add_handlers(loop, atomizer.shutdown)
elif args['<userfile>']:
with open(args['<userfile>']) as userfile:
+9 -4
View File
@@ -25,10 +25,15 @@ def countdown_timer(hours, minutes, seconds, now=datetime.now):
target = now()
one_second_later = timedelta(seconds=1)
for remaining in range(int(delay.total_seconds()), 0, -1):
target += one_second_later
print(print_info(f"{timedelta(seconds=remaining - 1)} remaining until next spray"), end="\r")
time.sleep((target - now()).total_seconds())
try:
for remaining in range(int(delay.total_seconds()), 0, -1):
target += one_second_later
print(print_info(f"{timedelta(seconds=remaining - 1)} remaining until next spray"), end="\r")
time.sleep((target - now()).total_seconds())
except KeyboardInterrupt:
return False
return True
def get_utc_time():