from flask import Flask, request, render_template_string
import subprocess
import tempfile
import os
app = Flask(__name__)
HTML = """
My Computer
"""
@app.route("/", methods=["GET", "POST"])
def index():
code = ""
output = ""
mode = "python"
if request.method == "POST":
code = request.form.get("code", "")
mode = request.form.get("mode", "")
if mode == "python":
try:
result = subprocess.check_output(["python3", "-c", code], stderr=subprocess.STDOUT).decode()
output = result
except subprocess.CalledProcessError as e:
output = e.output.decode()
elif mode == "sh":
try:
cleaned = code.replace('\r', '')
result = subprocess.check_output(cleaned, shell=True, stderr=subprocess.STDOUT, executable="/bin/bash").decode()
output = result
except subprocess.CalledProcessError as e:
output = e.output.decode()
elif mode == "c":
with tempfile.NamedTemporaryFile(delete=False, suffix=".c") as tmp:
tmp.write(code.encode())
tmp.flush()
exe = tmp.name + ".out"
comp = subprocess.run(["gcc", tmp.name, "-o", exe], capture_output=True)
if comp.returncode != 0:
output = comp.stderr.decode()
else:
run = subprocess.run([exe], capture_output=True)
output = run.stdout.decode() + run.stderr.decode()
os.unlink(tmp.name)
if os.path.exists(exe):
os.unlink(exe)
elif mode == "cpp":
with tempfile.NamedTemporaryFile(delete=False, suffix=".cpp") as tmp:
tmp.write(code.encode())
tmp.flush()
exe = tmp.name + ".out"
comp = subprocess.run(["g++", tmp.name, "-o", exe], capture_output=True)
if comp.returncode != 0:
output = comp.stderr.decode()
else:
run = subprocess.run([exe], capture_output=True)
output = run.stdout.decode() + run.stderr.decode()
os.unlink(tmp.name)
if os.path.exists(exe):
os.unlink(exe)
elif mode == "html":
output = "HTML code opened in new tab."
elif mode == "js":
try:
run = subprocess.check_output(["node", "-e", code], stderr=subprocess.STDOUT).decode()
output = run
except subprocess.CalledProcessError as e:
output = e.output.decode()
return render_template_string(HTML, code=code, output=output, mode=mode)
if __name__ == "__main__":
app.run(port=8000, debug=False)