Files
langchain/langchain/utilities/python.py
Peng Wang 62d0a01a0f Update python.py (#4971)
# Delete a useless "print"
2023-05-19 13:57:16 -07:00

26 lines
793 B
Python

import sys
from io import StringIO
from typing import Dict, Optional
from pydantic import BaseModel, Field
class PythonREPL(BaseModel):
"""Simulates a standalone Python REPL."""
globals: Optional[Dict] = Field(default_factory=dict, alias="_globals")
locals: Optional[Dict] = Field(default_factory=dict, alias="_locals")
def run(self, command: str) -> str:
"""Run command with own globals/locals and returns anything printed."""
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
try:
exec(command, self.globals, self.locals)
sys.stdout = old_stdout
output = mystdout.getvalue()
except Exception as e:
sys.stdout = old_stdout
output = repr(e)
return output