17 from threading
import current_thread, main_thread
34 LOGGER.info(
'Received signal: %s.' % signum)
36 sys.__stderr__.write(
'Execution forcefully stopped.\n')
38 sys.__stderr__.write(
'Second signal will force exit.\n')
47 self.
_orig_sigint_orig_sigint = signal.getsignal(signal.SIGINT)
48 self.
_orig_sigterm_orig_sigterm = signal.getsignal(signal.SIGTERM)
49 for signum
in signal.SIGINT, signal.SIGTERM:
55 signal.signal(signal.SIGINT, self.
_orig_sigint_orig_sigint
or signal.SIG_DFL)
56 signal.signal(signal.SIGTERM, self.
_orig_sigterm_orig_sigterm
or signal.SIG_DFL)
59 _can_register_signal = property
62 return signal
and current_thread()
is main_thread()
66 signal.signal(signum, self)
67 except ValueError
as err:
71 name, ctrlc = {signal.SIGINT: (
'INT',
'or with Ctrl-C '),
72 signal.SIGTERM: (
'TERM',
'')}[signum]
73 LOGGER.warn(
'Registering signal %s failed. Stopping execution '
74 'gracefully with this signal %sis not possible. '
75 'Original error was: %s' % (name, ctrlc, err))
Used for communicating failures in test execution.
def stop_running_keyword(self)
def _register_signal_handler(self, signum)
def _warn_about_registeration_error(self, signum, err)
def __exit__(self, *exc_info)
def start_running_keyword(self, in_teardown)
def _stop_execution_gracefully(self)
def _can_register_signal(self)
def __call__(self, signum, frame)