| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- from flask import Flask, request, jsonify
- from flask_cors import CORS
- import subprocess
- import json
- import re
- import os
- app = Flask(__name__)
- CORS(app)
- import sys # Ajoute cet import en haut de ton fichier
- @app.route("/run-extraction", methods=["POST"])
- def run_extraction():
- data = request.json
- inputs = data.get("inputs", {})
- script_dir = os.path.dirname(os.path.abspath(__file__))
- main_path = os.path.join(script_dir, "main.py")
- # 1. Mise à jour du fichier main.py
- try:
- with open(main_path, "r", encoding="utf-8") as f:
- content = f.read()
- # Nettoyage de l'ancien bloc INPUTS (ton regex/logique actuelle)
- start_idx = content.find("INPUTS = {")
- if start_idx != -1:
- brace_count = 0
- end_idx = start_idx
- for i, char in enumerate(content[start_idx:]):
- if char == "{": brace_count += 1
- elif char == "}":
- brace_count -= 1
- if brace_count == 0:
- end_idx = start_idx + i + 1
- break
- content = content[:start_idx] + content[end_idx:].lstrip()
- # Insertion des nouveaux inputs
- new_inputs_str = f"INPUTS = {json.dumps(inputs, indent=4, ensure_ascii=False)}\n\n"
- content = new_inputs_str + content
- with open(main_path, "w", encoding="utf-8") as f:
- f.write(content)
- f.flush() # Force l'écriture sur le disque
- os.fsync(f.fileno()) # Sécurité supplémentaire pour Linux/Mac
-
- except Exception as e:
- return jsonify({"stdout": "", "stderr": f"Erreur écriture : {str(e)}", "returncode": -1})
- # 2. Exécution du script
- try:
- # Utilisation de sys.executable pour éviter les erreurs de chemin Python
- result = subprocess.run(
- [sys.executable, main_path],
- capture_output=True,
- text=True,
- cwd=script_dir,
- timeout=60
- )
-
- return jsonify({
- "stdout": result.stdout,
- "stderr": result.stderr,
- "returncode": result.returncode
- })
- except subprocess.TimeoutExpired:
- return jsonify({"stdout": "", "stderr": "Timeout dépassé (60s)", "returncode": -1})
- except Exception as e:
- return jsonify({"stdout": "", "stderr": f"Erreur exécution : {str(e)}", "returncode": -1})
|