from flask import Flask, request import random import os import subprocess import time app = Flask(__name__) USER_NAME = "ubuntu" ROCKER_PATH = f"/home/{USER_NAME}/rocker/target/debug/rocker" @app.route("/", methods=["POST"]) def main(): code = request.json.get("code", "") _id = str(random.randint(8000_0000, 9000_0000)) user_path = f"/tmp/{_id}" os.mkdir(user_path) with open(f"{user_path}/main.py", "w") as f: f.write(code) try: _ = subprocess.run(["sudo", ROCKER_PATH, "--id", _id, "--image", "ubuntu_pypy_numpy_pandas_user", "--run", "python -u /tmp/main.py", "--env", f"/home/{USER_NAME}/rocker/pypy.env", "--volume", f"{user_path}:/tmp", "--log"]) except Exception as e: print(e) time.sleep(1) # 读取文件 out = "" try: log_path = f"/home/rocker/containers/{_id}/upper/logs/log" with open(log_path) as f: out = f.read() except Exception as e: print(e) subprocess.run(["sudo", ROCKER_PATH, "--rm", _id]) subprocess.run(["sudo", "rm", "-rf", user_path]) return {"msg": out, code: code, "id": _id} if __name__ == "__main__": app.run(host="0.0.0.0", port=8011, threaded=True)