From e1a26cb4f2032dfb44908ecb73b9039ca1c7dc04 Mon Sep 17 00:00:00 2001 From: sigoden Date: Sat, 26 Oct 2024 08:26:52 +0800 Subject: refactor: execute js/py code (#118) --- tools/execute_js_code.js | 16 +++++++++++----- tools/execute_py_code.py | 12 +++++++++++- 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'tools') diff --git a/tools/execute_js_code.js b/tools/execute_js_code.js index 6bad67a..3ca0401 100644 --- a/tools/execute_js_code.js +++ b/tools/execute_js_code.js @@ -1,5 +1,3 @@ -const vm = require('vm'); - /** * Execute the javascript code in node.js. * @typedef {Object} Args @@ -7,7 +5,15 @@ const vm = require('vm'); * @param {Args} args */ exports.run = function run({ code }) { - const context = vm.createContext({}); - const script = new vm.Script(code); - return script.runInContext(context); + let log = ""; + const oldStdoutWrite = process.stdout.write.bind(process.stdout); + process.stdout.write = (chunk, _encoding, callback) => { + log += chunk; + if (callback) callback(); + }; + + eval(code); + + process.stdout.write = oldStdoutWrite; + return log; } diff --git a/tools/execute_py_code.py b/tools/execute_py_code.py index 3c6beb4..ad9310c 100644 --- a/tools/execute_py_code.py +++ b/tools/execute_py_code.py @@ -1,6 +1,16 @@ +import io +import sys + def run(code: str): """Execute the python code. Args: code: Python code to execute, such as `print("hello world")` """ - return eval(code) \ No newline at end of file + old_stdout = sys.stdout + new_stdout = io.StringIO() + sys.stdout = new_stdout + + exec(code) + + sys.stdout = old_stdout + return new_stdout.getvalue() \ No newline at end of file -- cgit v1.2.3