From 80bf582b69f4514faf863e11b647864fb3b7dd14 Mon Sep 17 00:00:00 2001 From: FallenDeity <61227305+FallenDeity@users.noreply.github.com> Date: Sat, 24 Dec 2022 22:42:53 +0530 Subject: [PATCH 1/2] fix eval command include stdout and stderr --- wyvern/utils.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/wyvern/utils.py b/wyvern/utils.py index c7300bb..b341525 100644 --- a/wyvern/utils.py +++ b/wyvern/utils.py @@ -23,6 +23,8 @@ from __future__ import annotations import ast +import io +import contextlib import datetime import inspect import typing @@ -166,8 +168,14 @@ async def f_eval(self, *, code: str, renv: dict[str, typing.Any]) -> typing.Any: """ _fn_name = "__wyvern_eval" code = "\n".join(f" {i}" for i in code.strip().splitlines()) - parsed: typing.Any = ast.parse(f"async def {_fn_name}:\n{code}") - self.add_returns(parsed.body[0].body) - exec(compile(parsed, filename="", mode="exec"), renv) - fn = renv[_fn_name] - return await fn() + stdout, stderr = io.StringIO(), io.StringIO() + try: + parsed: typing.Any = ast.parse(f"async def {_fn_name}():\n{code}") + self.add_returns(parsed.body[0].body) + exec(compile(parsed, filename="", mode="exec"), renv) + fn = renv[_fn_name] + with contextlib.redirect_stdout(stdout), contextlib.redirect_stderr(stderr): + await fn() + except Exception as e: + return stdout.getvalue(), stderr.getvalue() + f"{type(e).__name__}: {e}" + return stdout.getvalue(), stderr.getvalue() From 2a7a07caed66c8d04711fb542aa44a20bf932515 Mon Sep 17 00:00:00 2001 From: FallenDeity <61227305+FallenDeity@users.noreply.github.com> Date: Sat, 24 Dec 2022 22:48:32 +0530 Subject: [PATCH 2/2] fix eval command include stdout and stderr --- wyvern/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wyvern/utils.py b/wyvern/utils.py index b341525..177bf51 100644 --- a/wyvern/utils.py +++ b/wyvern/utils.py @@ -23,10 +23,10 @@ from __future__ import annotations import ast -import io import contextlib import datetime import inspect +import io import typing import attrs