Ces exemples utilisent un jeton d’accès à l’API CoreWeave défini dans CWSANDBOX_API_KEY. Pour l’authentification par clé API Forge, consultez Premiers pas. Pour connaître les exigences relatives à CKS, consultez Modes de placement.
Ce guide explique comment exécuter des commandes dans des bacs à sable à l’aide de la méthode exec(). Utilisez-la pour exécuter des commandes shell, des scripts ou des interpréteurs interactifs dans une sandbox lorsque vous souhaitez capturer leur sortie, la diffuser en temps réel, envoyer des données sur stdin ou contrôler la gestion des codes de sortie non nuls. Ce guide s’adresse aux développeurs qui utilisent déjà le client Python cwsandbox.
Exécuter une commande de base
Commencez par une commande unique qui s’exécute jusqu’à son achèvement et renvoie la sortie capturée. La méthode exec() renvoie un handle Process :
Obtenir les résultats
exec() rend la main immédiatement, ce qui vous permet de choisir comment attendre la fin de la commande. Appelez .result() sur le handle Process pour bloquer jusqu’à l’obtention de la sortie :
Sortie en flux
Un appel bloquant à .result() attend que la commande se termine avant d’afficher la moindre sortie. Pour suivre la progression en temps réel, itérez sur process.stdout avant d’appeler .result() :
Utilisez la diffusion en continu lorsque vous devez :
- Surveiller des processus de longue durée.
- Traiter la sortie au fur et à mesure qu’elle arrive.
- Mettre en place des indicateurs de progression.
Certaines commandes ont besoin de recevoir une entrée sur stdin pendant leur exécution, comme les pipelines, les interpréteurs interactifs ou les outils qui lisent jusqu’à EOF. Pour envoyer une entrée à des commandes en cours d’exécution, activez stdin avec stdin=True :
Méthodes de StreamWriter
Lorsque stdin=True, process.stdin est un StreamWriter doté de trois méthodes :
write(data: bytes) : écrit des octets bruts. Renvoie OperationRef[None].
writeline(text: str) : écrit du texte suivi d’un saut de ligne (encodé en UTF-8). Renvoie OperationRef[None].
close() : signale la fin de fichier (EOF). Le système finalise d’abord les écritures en attente. Renvoie OperationRef[None].
Lorsque stdin=False (valeur par défaut), process.stdin vaut None.
Effectuer plusieurs écritures
Envoyez les données de manière incrémentielle avant de fermer le flux :
Exécuter du code Python en mode interactif via stdin
Transmettez du code Python à un interpréteur interactif :
Combiner la diffusion en continu sur stdin et stdout
Diffusez la sortie en continu tout en envoyant des entrées :
Gérer les commandes qui dépendent d’EOF
Certaines commandes (comme sort) lisent l’intégralité de l’entrée avant de produire une sortie. Fermez stdin pour signaler la fin de fichier (EOF) :
Utiliser stdin dans un contexte asynchrone
Dans un contexte asynchrone, appliquez directement await à chaque OperationRef :
Quand utiliser stdin=True ou stdin=False
Définir le répertoire de travail
Par défaut, les commandes s’exécutent dans le répertoire de travail par défaut de la sandbox. Pour en utiliser un autre, remplacez-le avec cwd :
Le chemin doit être absolu.
Définir un délai d’expiration
Pour arrêter une commande susceptible de se bloquer ou de s’exécuter plus longtemps que prévu, définissez un délai d’expiration avec timeout_seconds :
Gérer les erreurs avec check
Le paramètre check détermine le comportement à adopter lorsque le code de sortie est non nul :
Comportement par défaut avec check=False
Renvoie le résultat, quel que soit le code de sortie :
Lever une exception en cas d’échec avec check=True
Lève une exception SandboxExecutionError si le code de sortie est non nul :
Exécuter du code Python
Les bacs à sable servent couramment à exécuter du code Python, qu’il s’agisse de courtes commandes d’une seule ligne ou de scripts plus longs transmis directement en ligne :
Exécution séquentielle ou exécution parallèle
Choisissez l’exécution séquentielle lorsque des commandes dépendent de commandes précédentes, et l’exécution parallèle lorsque les commandes sont indépendantes et que vous souhaitez les exécuter simultanément sur plusieurs bacs à sable.
Exécuter les commandes séquentiellement lorsque l’ordre est important
Exécuter des commandes indépendantes en parallèle
Attendre la fin de N processus sur M
Utilisez cwsandbox.wait() pour attendre qu’un sous-ensemble de processus se termine :
Contrôler les processus
Lorsqu’une commande continue de s’exécuter une fois que l’appel exec() a rendu la main, vous pouvez vérifier son état sans bloquer, ou attendre qu’elle se termine au moment qui vous convient. Le handle Process fournit des méthodes de surveillance et de contrôle :
Dernière modification le 15 octobre 2026