Commit 5476b345352eededeb8b85d767c143dcf66eff68
1 parent
2d620b8a
Exists in
master
and in
1 other branch
- Ask yes/no to confirm stopping the server
Showing
2 changed files
with
20 additions
and
5 deletions
Show diff stats
serve.py
| @@ -9,6 +9,7 @@ import logging.config | @@ -9,6 +9,7 @@ import logging.config | ||
| 9 | import argparse | 9 | import argparse |
| 10 | from concurrent.futures import ThreadPoolExecutor | 10 | from concurrent.futures import ThreadPoolExecutor |
| 11 | import mimetypes | 11 | import mimetypes |
| 12 | +import signal | ||
| 12 | 13 | ||
| 13 | # user installed libraries | 14 | # user installed libraries |
| 14 | import tornado.ioloop | 15 | import tornado.ioloop |
| @@ -285,6 +286,16 @@ class QuestionHandler(BaseHandler): | @@ -285,6 +286,16 @@ class QuestionHandler(BaseHandler): | ||
| 285 | } | 286 | } |
| 286 | }) | 287 | }) |
| 287 | 288 | ||
| 289 | + | ||
| 290 | +# ------------------------------------------------------------------------- | ||
| 291 | +def signal_handler(signal, frame): | ||
| 292 | + r = input(' --> Stop webserver? (yes/no) ') | ||
| 293 | + if r in ('yes', 'YES'): | ||
| 294 | + tornado.ioloop.IOLoop.current().stop() | ||
| 295 | + logging.critical('Webserver stopped.') | ||
| 296 | + sys.exit(0) | ||
| 297 | + | ||
| 298 | + | ||
| 288 | # ------------------------------------------------------------------------- | 299 | # ------------------------------------------------------------------------- |
| 289 | # Tornado web server | 300 | # Tornado web server |
| 290 | # ---------------------------------------------------------------------------- | 301 | # ---------------------------------------------------------------------------- |
| @@ -339,13 +350,17 @@ def main(): | @@ -339,13 +350,17 @@ def main(): | ||
| 339 | http_server.listen(8443) | 350 | http_server.listen(8443) |
| 340 | 351 | ||
| 341 | # --- run webserver | 352 | # --- run webserver |
| 342 | - logging.info('Webserver running...') | 353 | + logging.info('Webserver running... (Ctrl-C to stop)') |
| 354 | + signal.signal(signal.SIGINT, signal_handler) | ||
| 355 | + | ||
| 356 | + | ||
| 343 | try: | 357 | try: |
| 344 | tornado.ioloop.IOLoop.current().start() # running... | 358 | tornado.ioloop.IOLoop.current().start() # running... |
| 345 | - except KeyboardInterrupt: | 359 | + except Exception: |
| 360 | + logging.critical('Webserver stopped.') | ||
| 346 | tornado.ioloop.IOLoop.current().stop() | 361 | tornado.ioloop.IOLoop.current().stop() |
| 362 | + raise | ||
| 347 | 363 | ||
| 348 | - logging.critical('Webserver stopped.') | ||
| 349 | 364 | ||
| 350 | # ---------------------------------------------------------------------------- | 365 | # ---------------------------------------------------------------------------- |
| 351 | if __name__ == "__main__": | 366 | if __name__ == "__main__": |
tools.py
| @@ -16,11 +16,11 @@ from pygments.formatters import HtmlFormatter | @@ -16,11 +16,11 @@ from pygments.formatters import HtmlFormatter | ||
| 16 | logger = logging.getLogger(__name__) | 16 | logger = logging.getLogger(__name__) |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | -# --------------------------------------------------------------------------- | 19 | +# ------------------------------------------------------------------------- |
| 20 | # Markdown to HTML renderer with support for LaTeX equations | 20 | # Markdown to HTML renderer with support for LaTeX equations |
| 21 | # Inline math: $x$ | 21 | # Inline math: $x$ |
| 22 | # Block math: $$x$$ or \begin{equation}x\end{equation} | 22 | # Block math: $$x$$ or \begin{equation}x\end{equation} |
| 23 | -# --------------------------------------------------------------------------- | 23 | +# ------------------------------------------------------------------------- |
| 24 | class MathBlockGrammar(mistune.BlockGrammar): | 24 | class MathBlockGrammar(mistune.BlockGrammar): |
| 25 | block_math = re.compile(r"^\$\$(.*?)\$\$", re.DOTALL) | 25 | block_math = re.compile(r"^\$\$(.*?)\$\$", re.DOTALL) |
| 26 | latex_environment = re.compile(r"^\\begin\{([a-z]*\*?)\}(.*?)\\end\{\1\}", re.DOTALL) | 26 | latex_environment = re.compile(r"^\\begin\{([a-z]*\*?)\}(.*?)\\end\{\1\}", re.DOTALL) |