Athspi / app.py
Artificial-superintelligence's picture
Update app.py
a15e38b verified
raw
history blame
2.84 kB
from flask import Flask, request, jsonify, render_template, send_from_directory
import os
import subprocess
import tempfile
import shutil
import sys
app = Flask(__name__)
# Create a temporary directory for operations
temp_dir = tempfile.mkdtemp()
current_dir = temp_dir
def execute_command(command, cwd=None):
"""Executes a command and returns the output."""
process = subprocess.Popen(
command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
cwd=cwd or current_dir
)
stdout, stderr = process.communicate()
return stdout + stderr
@app.route("/")
def index():
return render_template("index.html")
@app.route("/execute", methods=["POST"])
def execute_code():
global current_dir
command = request.json.get("code", "").strip()
if not command:
return jsonify({"result": "Error: No command provided."})
try:
if command.startswith("cd "):
# Change directory
new_dir = os.path.join(current_dir, command[3:])
if os.path.isdir(new_dir):
current_dir = os.path.abspath(new_dir)
return jsonify({"result": f"Changed directory to: {current_dir}"})
else:
return jsonify({"result": f"Error: Directory not found: {new_dir}"})
elif command.startswith("!"):
# Execute shell command
result = execute_command(command[1:])
elif command.startswith("pip install"):
# Install Python package
result = execute_command(f"{sys.executable} -m {command}")
elif command.startswith("git "):
# Execute git command
result = execute_command(command)
else:
# Execute Python code
if command.endswith(".py"):
# Run Python script
result = execute_command(f"{sys.executable} {command}")
else:
# Execute Python code
result = execute_command(f"{sys.executable} -c \"{command}\"")
return jsonify({"result": result})
except Exception as e:
return jsonify({"result": f"Error: {str(e)}"})
@app.route("/cleanup", methods=["POST"])
def cleanup():
global temp_dir, current_dir
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
temp_dir = tempfile.mkdtemp()
current_dir = temp_dir
return jsonify({"result": "Temporary files cleaned up."})
@app.route("/list_files", methods=["GET"])
def list_files():
files = os.listdir(current_dir)
return jsonify({"files": files})
@app.route("/download/<path:filename>", methods=["GET"])
def download_file(filename):
return send_from_directory(current_dir, filename, as_attachment=True)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)