Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Outil : executer du code Python
La vraie puissance de Claude Code, c'est de pouvoir executer du code. Le LLM ecrit un script, le lance, voit les erreurs, corrige, relance. C'est la boucle magique qui fait que l'assistant ne se contente pas de deviner : il verifie.
Mais executer du code arbitraire sur une machine, c'est un terrain mine. Un script mal ecrit peut faire une boucle infinie, supprimer des fichiers, ou saturer la memoire. C'est pour ca que meme le vrai Claude Code execute le code dans un sandbox avec des limites.
En Python, subprocess permet de lancer un script dans un processus separe avec un timeout :
Pour ce projet, on ne va pas lancer de vrais processus dans le sandbox. A la place, ecris une fonction executer_code_simule(code, timeout=10) qui simule l'execution en utilisant exec() avec des gardes-fous.
La fonction doit :
Verifier que le code ne contient pas de commandes dangereuses (import os, import shutil, subprocess, eval(, open( en mode ecriture). Si c'est le cas, refuser l'execution. Executer le code avec exec() en capturant stdout via un StringIO. Gerer le cas ou le code leve une exception. Retourner un dictionnaire structure avec le resultat.
r = executer_code_simule("print('Bonjour')")
assert r["succes"] == True, "Un simple print doit reussir"
assert "Bonjour" in r["stdout"], f"stdout doit contenir 'Bonjour', obtenu: '{r['stdout']}'"
assert r["code_retour"] == 0
Code avec erreur
r = executer_code_simule("x = 1 / 0")
assert r["succes"] == False, "Une division par zero doit echouer"
assert "ZeroDivisionError" in r["stderr"], f"stderr doit contenir ZeroDivisionError, obtenu: '{r['stderr']}'"
assert r["code_retour"] == 1
Code dangereux refuse
r = executer_code_simule("import os")
assert r["succes"] == False, "import os doit etre refuse"
assert r["code_retour"] == -1, "Le code retour doit etre -1 pour du code refuse"
assert "interdit" in r["stderr"].lower() or "refuse" in r["stderr"].lower()
Plusieurs prints
code = "for i in range(3):\n print(i)"
r = executer_code_simule(code)
assert r["succes"] == True
assert "0" in r["stdout"] and "1" in r["stdout"] and "2" in r["stdout"]