File size: 2,047 Bytes
6dea265 5bc4351 382764a 21fe3fa 5bc4351 382764a 4d30d4b 6dea265 382764a 6dea265 5bc4351 6dea265 5bc4351 6dea265 382764a 6dea265 5bc4351 6dea265 5bc4351 6dea265 21fe3fa 6dea265 21fe3fa 6dea265 382764a 6dea265 382764a 4d30d4b 6dea265 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
from flask import Flask, request, jsonify, render_template, stream_with_context, Response
import os
import subprocess
import tempfile
import shutil
app = Flask(__name__)
# Create a temporary directory for operations
temp_dir = tempfile.mkdtemp()
@app.route("/")
def index():
return render_template("index.html")
def execute_shell_command(command):
"""Executes a shell command and streams output."""
process = subprocess.Popen(
command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
cwd=temp_dir
)
for line in iter(process.stdout.readline, ""):
yield f"{line}<br>"
for line in iter(process.stderr.readline, ""):
yield f"Error: {line}<br>"
process.stdout.close()
process.stderr.close()
process.wait()
@app.route("/execute", methods=["POST"])
def execute_code():
command = request.json.get("code", "").strip()
if not command:
return jsonify({"result": "Error: No command provided."})
try:
# If the command starts with "!", treat it as a shell command
if command.startswith("!"):
shell_command = command[1:]
return Response(stream_with_context(execute_shell_command(shell_command)))
else:
# Treat the command as Python code
process = subprocess.run(
["python3", "-c", command],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
cwd=temp_dir
)
return jsonify({"result": process.stdout + process.stderr})
except Exception as e:
return jsonify({"result": f"Error: {e}"})
@app.route("/cleanup", methods=["POST"])
def cleanup():
global temp_dir
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
temp_dir = tempfile.mkdtemp() # Recreate for a new session
return jsonify({"result": "Temporary files cleaned up."})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)
|