> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Shells interactifs et TTY

> Utilisez des sessions TTY interactives avec shell() pour les applications de terminal et la diffusion en continu d’octets bruts.

Ces exemples utilisent un jeton d’accès à l’API CoreWeave dans `CWSANDBOX_API_KEY`. Pour l’authentification par clé API Forge, voir [Premiers pas](/fr/products/sandboxes/get-started). Pour les exigences relatives à CKS, voir [Modes de placement](/fr/products/sandboxes/placement).

Utilisez `Sandbox.shell()` pour les sessions TTY interactives. Conçue pour un usage interactif, cette méthode renvoie un objet `TerminalSession` qui diffuse les octets bruts en continu, sans mise en mémoire tampon de la sortie. Pour exécuter des commandes par lots, utilisez plutôt [`exec()`](/fr/products/sandboxes/client/guides/execution).

<h2 id="shell-session">
  Session shell
</h2>

Créez une sandbox et ouvrez une session de shell interactif. Appelée sans argument, `Sandbox.run()` utilise la commande longue durée par défaut. Les exemples suivants partent du principe que ce contexte est toujours actif.

```python theme={"system"}
from cwsandbox import Sandbox

with Sandbox.run() as sandbox:
    terminal = sandbox.shell(
        ["/bin/bash"],
        width=80,
        height=24,
    )
```

`shell()` alloue toujours un TTY et active stdin. La `TerminalSession` renvoyée diffuse les octets bruts en flux, sans aller-retour de décodage ou d’encodage UTF-8, ce qui permet de l’utiliser sans risque avec les séquences d’échappement de terminal et les sorties binaires.

<h2 id="send-commands-and-read-output">
  Envoyer des commandes et lire la sortie
</h2>

Une fois la session de terminal ouverte, écrivez des commandes sur stdin et récupérez en streaming la sortie brute fusionnée (en octets) du shell distant.

```python theme={"system"}
import sys

terminal.stdin.writeline("echo hello").result()
terminal.stdin.writeline("ls -la /tmp").result()
terminal.stdin.writeline("exit").result()

# Parcourir la sortie brute en octets
for chunk in terminal.output:
    sys.stdout.buffer.write(chunk)
    sys.stdout.buffer.flush()  # Vider la mémoire tampon pour que la sortie s’affiche au fil de l’exécution de la session.

# Obtenir le code de sortie
exit_code = terminal.wait(timeout=5.0)
```

`TerminalSession` ne met pas la sortie en mémoire tampon. Stdout et stderr sont fusionnés en un seul flux d'octets bruts sur `terminal.output`. Le résultat ne comporte pas d'attributs `stdout` ou `stderr` distincts. Lisez `terminal.output` en continu. Si vous cessez de le lire, la contre-pression exercée par la file d'attente bornée bloque la session distante.

<h2 id="terminal-resize">
  Redimensionnement du terminal
</h2>

Envoyez des messages de redimensionnement lorsque les dimensions du terminal changent.

```python theme={"system"}
terminal.resize(120, 40)
```

`resize()` fonctionne en mode fire-and-forget sur `TerminalSession`.

<h2 id="exit-a-shell-session">
  Quitter une session shell
</h2>

Pour mettre fin à une session shell, fermez stdin ou envoyez une commande de sortie :

```python theme={"system"}
terminal.stdin.writeline("exit").result()  # Demander au shell distant de se terminer
# ou
terminal.stdin.close().result()            # Fermer le flux stdin
```

La session shell se termine lorsque le processus distant s’arrête. Appelez `terminal.wait()` ou `terminal.result()` pour bloquer l’exécution jusqu’à l’obtention du code de sortie.

<h2 id="commands-and-use-cases">
  Commandes et cas d’utilisation
</h2>

| Cas d’utilisation | Approche |
| - | - |
| Commande ponctuelle depuis le terminal | `cwsandbox exec [ID] echo hello` |
| Shell interactif depuis le terminal | `cwsandbox sh [ID]` |
| Exécuter un script et capturer la sortie (SDK) | `exec(["python", "script.py"])` |
| Session de shell interactif (SDK) | `shell(["/bin/bash"])` |
| Envoyer une entrée à une commande (SDK) | `exec(["cat"], stdin=True)` |
| Application en mode terminal (vim, htop) | `shell(["vim"])` + mode brut (raw) de la CLI |

<h2 id="see-also">
  Voir aussi
</h2>

* [Exécution de commandes](/fr/products/sandboxes/client/guides/execution) - Exécutez des commandes avec `exec()`.
* [Journalisation de la sandbox](/fr/products/sandboxes/client/guides/logging) - Diffusez en continu les journaux du conteneur.
