diff --git a/evennia/server/evennia_launcher.py b/evennia/server/evennia_launcher.py index 6bec3bc0f..4215bcca5 100644 --- a/evennia/server/evennia_launcher.py +++ b/evennia/server/evennia_launcher.py @@ -16,6 +16,7 @@ import shutil import importlib from argparse import ArgumentParser from subprocess import Popen, check_output, call, CalledProcessError, STDOUT +import twisted import django # Signal processing @@ -325,6 +326,11 @@ ERROR_NODJANGO = \ ERROR: Django does not seem to be installed. """ +NOTE_KEYBOARDINTERRUPT = \ + """ + STOP: Caught keyboard interrupt while in interactive mode. + """ + #------------------------------------------------------------ # # Functions @@ -1039,8 +1045,10 @@ def server_operation(mode, service, interactive, profiler): try: process.wait() except KeyboardInterrupt: - print "\nKeyboard interrupt sent in interactive mode.\n" - + server_operation("stop", "portal", False, False) + return + finally: + print NOTE_KEYBOARDINTERRUPT elif mode == 'reload': # restarting services diff --git a/evennia/server/evennia_runner.py b/evennia/server/evennia_runner.py index aa4435350..8477f84e8 100644 --- a/evennia/server/evennia_runner.py +++ b/evennia/server/evennia_runner.py @@ -187,6 +187,7 @@ def start_services(server_argv, portal_argv): try: message, rc = processes.get() except KeyboardInterrupt: + # this only matters in interactive mode break # restart only if process stopped cleanly