Skip to content

Commit 67d1804

Browse files
committed
Handle traceback generated by a KeyboardInterrupt when stopping the server (Spyder case)
1 parent 021bd1d commit 67d1804

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

vpython/no_notebook.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,31 @@
2222
from .rate_control import rate
2323

2424

25+
# Redefine `Thread.run` to not show a traceback for Spyder when stopping
26+
# the server by raising a KeyboardInterrupt or SystemExit.
27+
if _in_spyder:
28+
def install_thread_stopped_message():
29+
"""
30+
Workaround to prevent showing a traceback when VPython server stops.
31+
32+
See:
33+
https://bugs.python.org/issue1230540
34+
"""
35+
run_old = threading.Thread.run
36+
37+
def run(*args, **kwargs):
38+
try:
39+
run_old(*args, **kwargs)
40+
except (KeyboardInterrupt, SystemExit):
41+
print("VPython server stopped.")
42+
except:
43+
raise
44+
threading.Thread.run = run
45+
46+
install_thread_stopped_message()
47+
48+
49+
2550
# Check for Ctrl+C. SIGINT will also be sent by our code if WServer is closed.
2651
def signal_handler(signal, frame):
2752
stop_server()

0 commit comments

Comments
 (0)