diff --git a/rlpython/command_line.py b/rlpython/command_line.py index cac1f4b..f72dab6 100644 --- a/rlpython/command_line.py +++ b/rlpython/command_line.py @@ -19,25 +19,6 @@ def handle_command_line(): namespace = argument_parser.parse_args() - # frontend mode - if namespace.frontend_mode: - def restore_pgrp(*args, **kwargs): - os.tcsetpgrp(fd, old_pgrp) - os.setpgid(0, old_pgrp) - - exit(0) - - signal.signal(signal.SIGTSTP, signal.SIG_IGN) - signal.signal(signal.SIGTTOU, signal.SIG_IGN) - signal.signal(signal.SIGTERM, restore_pgrp) - - pid = os.getpid() - fd = os.open('/dev/tty', os.O_RDONLY) - old_pgrp = os.tcgetpgrp(fd) - - os.setpgid(0, pid) - os.tcsetpgrp(fd, pid) - # client mode if namespace.url: try: @@ -55,12 +36,6 @@ def restore_pgrp(*args, **kwargs): finally: repl_client.shutdown() - if namespace.frontend_mode: - restore_pgrp() - - if namespace.frontend_mode: - restore_pgrp() - exit(0) # local mode @@ -76,17 +51,12 @@ def restore_pgrp(*args, **kwargs): repl_kwargs[key] = value - try: - embed( - globals={}, - single_threaded=True, - started_from_cmd_line=True, - **repl_kwargs, - ) - - finally: - if namespace.frontend_mode: - restore_pgrp() + embed( + globals={}, + single_threaded=True, + started_from_cmd_line=True, + **repl_kwargs, + ) if __name__ == '__main__': diff --git a/rlpython/embed.py b/rlpython/embed.py index 1eb6e23..15271f7 100644 --- a/rlpython/embed.py +++ b/rlpython/embed.py @@ -1,9 +1,17 @@ +from threading import Lock import inspect import logging import os +_lock = Lock() -def embed(single_threaded=False, bind='', permissions='600', + +def embed(*args, **kwargs): + with _lock: + return _embed(*args, **kwargs) + + +def _embed(single_threaded=False, bind='', permissions='600', multi_session=False, started_from_cmd_line=False, print=print, debug=False, **repl_kwargs): @@ -19,7 +27,7 @@ def embed(single_threaded=False, bind='', permissions='600', # use namespace of caller instead of own if nothing is set if 'globals' not in repl_kwargs: stack = inspect.stack() - frame_info = stack[1] + frame_info = stack[2] repl_kwargs['globals'] = { **frame_info.frame.f_globals, diff --git a/rlpython/frontend.py b/rlpython/frontend.py index 3254747..139055d 100644 --- a/rlpython/frontend.py +++ b/rlpython/frontend.py @@ -1,14 +1,24 @@ -import subprocess +from threading import Thread import sys +import os def start_frontend(port): - process = subprocess.Popen([ - sys.executable, - '-m', - 'rlpython.command_line', - 'localhost:{}'.format(port), - '--frontend', - ]) - - return process + def _run(): + os.system( + '{} -m rlpython.command_line localhost:{} --frontend'.format( + sys.executable, + port, + ), + ) + + thread = Thread( + name='rlpython Frontend', + daemon=False, + target=_run, + ) + + thread.start() + + return thread +