catch KeyboardInterrupt and sigterm

This commit is contained in:
jb-alvarado 2019-06-06 22:02:20 +02:00
parent cf9bdea606
commit be7f34aa7a

View File

@ -26,6 +26,7 @@ import logging
import os import os
import random import random
import smtplib import smtplib
import signal
import socket import socket
import sys import sys
import time import time
@ -983,6 +984,13 @@ class GetSourceIter(object):
yield self.src_cmd + self.filtergraph yield self.src_cmd + self.filtergraph
def handle_exit(sig, frame):
raise(SystemExit)
signal.signal(signal.SIGTERM, handle_exit)
def main(): def main():
year = get_date(False).split('-')[0] year = get_date(False).split('-')[0]
@ -1036,22 +1044,28 @@ def main():
media = MediaStore(_folder.extensions) media = MediaStore(_folder.extensions)
media.fill(_folder.storage) media.fill(_folder.storage)
MediaWatcher(_folder.storage, _folder.extensions, media) watcher = MediaWatcher(_folder.storage, _folder.extensions, media)
get_source = GetSource(media, _folder.shuffle) get_source = GetSource(media, _folder.shuffle)
for src_cmd in get_source.next(): try:
if src_cmd[0] == '-i': for src_cmd in get_source.next():
current_file = src_cmd[1] if src_cmd[0] == '-i':
else: current_file = src_cmd[1]
current_file = src_cmd[3] else:
current_file = src_cmd[3]
logger.info('play: "{}"'.format(current_file)) logger.info('play: "{}"'.format(current_file))
with Popen([ with Popen([
'ffmpeg', '-v', 'error', '-hide_banner', '-nostats' 'ffmpeg', '-v', 'error', '-hide_banner', '-nostats'
] + src_cmd + ff_pre_settings, ] + src_cmd + ff_pre_settings,
stdout=PIPE) as decoder: stdout=PIPE) as decoder:
copyfileobj(decoder.stdout, encoder.stdin) copyfileobj(decoder.stdout, encoder.stdin)
except (KeyboardInterrupt, SystemExit):
logger.warning('program terminated')
watcher.stop()
decoder.terminate()
encoder.terminate()
finally: finally:
encoder.wait() encoder.wait()