Walmart-the-bag's picture
nerdify
fc737eb verified
raw
history blame
1.53 kB
import gradio as gr
import subprocess
import matplotlib.pyplot as plt
import traceback
import sys
import io
import numpy as np
from PIL import Image
def run_code(code):
try:
if any(bad_cmd in code for bad_cmd in ['rm', 'os', 'shutil']):
return create_image("")
old_stdout = sys.stdout
sys.stdout = io.StringIO()
local_env = {'plt': plt, 'subprocess': subprocess}
exec(code, {}, local_env)
output = sys.stdout.getvalue()
sys.stdout = old_stdout
if any('plt' in line for line in code.splitlines()):
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
img = Image.open(buf)
img_array = np.array(img)
plt.close()
if np.array(img_array).sum() > 0:
return img_array
return create_image("")
except Exception as e:
return create_image("")
def create_image(message):
fig, ax = plt.subplots()
ax.text(0.5, 0.5, message, fontsize=20, ha='center', va='center')
ax.axis('off')
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
img = Image.open(buf)
plt.close()
return np.array(img)
interface = gr.Interface(
fn=run_code,
inputs=gr.Code(language="python", label="Enter Python Code"),
outputs=gr.Image(type="numpy", label="Output"),
title="Python Interpreter",
description="Run Python code. Requires matplotlib for plots."
)
interface.launch()