Spaces:
Sleeping
Sleeping
| import subprocess | |
| import time | |
| import re | |
| import ast | |
| # Start the REPL subprocess | |
| python_exe = '/Users/18084/Desktop/CS252R/final_project/rasp-env-py3.9/Scripts/python.exe' #SETUP THING: replace with path to your python environment | |
| ''' | |
| THE FOLLOWING FUNCTIONS ARE DEPRECATED | |
| ''' | |
| def clean_carrots(text): | |
| pattern = r">>(.*?)>>" | |
| match = re.search(pattern, text) | |
| if match: | |
| result = match.group(1).strip() # .strip() is used to remove any leading/trailing whitespace | |
| return result | |
| def parse_output(out): | |
| out = clean_carrots(out) | |
| out = ast.literal_eval(out) | |
| # can arrive as tuple, list, or dictionary | |
| # ultimately want to convert everything to list form | |
| if isinstance(out, dict): | |
| return list(out.values()) | |
| if isinstance(out, tuple): | |
| return list(out) | |
| if isinstance(out, list): | |
| return list | |
| raise Exception("Error executing rasp program.") | |
| def run_repl(command): | |
| ''' | |
| Runs the RASP repl in a separate subprocess. | |
| ''' | |
| process = subprocess.Popen([python_exe, 'RASP/RASP_support/REPL.py'], | |
| stdin=subprocess.PIPE, | |
| stdout=subprocess.PIPE, | |
| stderr=subprocess.PIPE, | |
| text=True) | |
| # Send commands to the REPL | |
| process.stdin.write(f'{command}\nexit()\n') | |
| process.stdin.flush() | |
| # Check periodically if the subprocess has terminated | |
| while True: | |
| if process.poll() is not None: | |
| # The subprocess has terminated | |
| break | |
| time.sleep(0.1) # Wait for a short period (e.g., 0.1 seconds) before checking again | |
| # Close the subprocess if still running | |
| if process.poll() is None: | |
| process.terminate() | |
| # Read output and error | |
| output = process.stdout.readlines() | |
| error = process.stderr.readlines() | |
| # Print output and error | |
| str_output = "" | |
| str_error = "" | |
| for line in output: | |
| str_output += line.strip() + " " | |
| for line in error: | |
| str_error += line.strip() + " " | |
| str_output = parse_output(str_output) | |
| return str_output, str_error | |
| if __name__ == "__main__": | |
| command = "select(tokens, tokens, ==)(\"hi\");" | |
| res, _res_err = run_repl(command) | |
| print(res) | |
| command = "selector_width(select(tokens, tokens, ==))(\"hi\");" | |
| res, _res_err = run_repl(command) | |
| print(res) |