add console process interruption by ctrl C
This commit is contained in:
20
cps.py
20
cps.py
@@ -42,9 +42,25 @@ def hide_console_windows():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if os.name == "nt":
|
# Only hide the console window on Windows when there is no interactive
|
||||||
|
# console attached. This preserves the ability to use Ctrl+C from a
|
||||||
|
# terminal (stdin is a tty) to stop the server.
|
||||||
|
if os.name == "nt" and not sys.stdin.isatty():
|
||||||
hide_console_windows()
|
hide_console_windows()
|
||||||
main()
|
|
||||||
|
try:
|
||||||
|
main()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
# Allow stopping the server with Ctrl+C from an interactive console.
|
||||||
|
try:
|
||||||
|
# Try to perform a graceful stop if web_server is available.
|
||||||
|
# Import here to avoid import-time side-effects when not needed.
|
||||||
|
from cps import web_server
|
||||||
|
web_server.stop()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
print('\nCalibre-Web: received interrupt, shutting down')
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -216,6 +216,12 @@ class WebServer(object):
|
|||||||
try:
|
try:
|
||||||
sock, output = self._make_gevent_listener()
|
sock, output = self._make_gevent_listener()
|
||||||
log.info('Starting Gevent server on %s', output)
|
log.info('Starting Gevent server on %s', output)
|
||||||
|
# Also print to stdout so interactive terminals show a clear success message
|
||||||
|
try:
|
||||||
|
print(f"Calibre-Web: server started on {output}")
|
||||||
|
except Exception:
|
||||||
|
print(f"Calibre-Web: error {output}")
|
||||||
|
pass
|
||||||
self.wsgiserver = WSGIServer(sock, self.app, log=self.access_logger, handler_class=MyWSGIHandler,
|
self.wsgiserver = WSGIServer(sock, self.app, log=self.access_logger, handler_class=MyWSGIHandler,
|
||||||
error_log=log,
|
error_log=log,
|
||||||
spawn=Pool(), **ssl_args)
|
spawn=Pool(), **ssl_args)
|
||||||
@@ -266,6 +272,12 @@ class WebServer(object):
|
|||||||
output = _readable_listen_address(self.listen_address, self.listen_port)
|
output = _readable_listen_address(self.listen_address, self.listen_port)
|
||||||
http_server.listen(self.listen_port, self.listen_address)
|
http_server.listen(self.listen_port, self.listen_address)
|
||||||
log.info('Starting Tornado server on %s', output)
|
log.info('Starting Tornado server on %s', output)
|
||||||
|
# Also print to stdout so interactive terminals show a clear success message
|
||||||
|
try:
|
||||||
|
print(f"Calibre-Web: server started on {output}")
|
||||||
|
except Exception:
|
||||||
|
print(f"Calibre-Web: error {output}")
|
||||||
|
pass
|
||||||
|
|
||||||
self.wsgiserver = IOLoop.current()
|
self.wsgiserver = IOLoop.current()
|
||||||
self.wsgiserver.start()
|
self.wsgiserver.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user