added global/local namespace dicts for exec; added traceback print; return early for /

This commit is contained in:
gac-cristall (Resp. Pedrini Bill Francesco)
2022-05-11 12:47:47 +02:00
parent 27ec3e5b9a
commit 108953a846

View File

@ -27,12 +27,16 @@ from io import StringIO
import os
import sys
import shlex
import traceback
import http.server
import socketserver
URL_SPACE = "%20"
exec_globals = {}
exec_locals = {}
class ScriptServer(http.server.SimpleHTTPRequestHandler):
@ -42,6 +46,7 @@ class ScriptServer(http.server.SimpleHTTPRequestHandler):
if not args:
super().do_GET()
return
scr = args[0]
@ -78,12 +83,13 @@ def run_script(fn, args):
code = open_script(fn)
old_sys_argv, sys.argv = sys.argv, args
try:
exec(code)
exec(code, exec_globals, exec_locals)
except BaseException as e: # need to catch SystemExit etc. as well
print("_" * 80)
tn = type(e).__name__
msg = f"{tn}: {e}"
print(msg, file=sys.stderr)
traceback.print_exc()
sys.argv = old_sys_argv
return sio.getvalue()