from flask import Flask, request import random import os import subprocess import time import traceback app = Flask(__name__) USER_NAME = "yanguangshaonian" ROCKER_PATH = f"/home/{USER_NAME}/rocker/target/debug/rocker" HANDLER_FILE = "handler.py" HANDLER_CODE = "" with open(f"./{HANDLER_FILE}") as f: HANDLER_CODE = f.read() @app.route("/", methods=["POST"]) def main(): code = request.json.get("code", "") language = request.json.get("language", "") _id = str(random.randint(8000_0000, 9000_0000)) resp = {"msg": "", code: "", "id": _id} if len(code) > 1_0000: resp["msg"] = "代码过长" return resp user_path = f"/tmp/{_id}" os.mkdir(user_path) with open(f"{user_path}/code", "w") as f: f.write(code) with open(f"{user_path}/{HANDLER_FILE}", "w") as f: f.write(HANDLER_CODE) try: _ = subprocess.run(["sudo", ROCKER_PATH, "--id", _id, "--image", "base_ubuntu_image", "--run", f"python3 -u /tmp/handler.py {language}", "--env", f"/home/{USER_NAME}/rocker/quant.env", "--volume", f"{user_path}:/tmp", "--log"]) except Exception as e: resp["msg"] += f"{traceback.format_exc()}\n" print(e) time.sleep(3) # 读取文件 try: log_path = f"/home/rocker/containers/{_id}/upper/logs/log" with open(log_path) as f: log_str = f"{f.read()}\n" resp["msg"] += log_str except Exception as e: resp["msg"] += f"{traceback.format_exc()}\n" resp["msg"] = resp["msg"][:10000].rstrip() subprocess.run(["sudo", ROCKER_PATH, "--rm", _id]) subprocess.run(["sudo", "rm", "-rf", user_path]) return resp if __name__ == "__main__": app.run(host="0.0.0.0", port=8011, threaded=True)