> ## 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.

# Interactive shells and TTY

> Use interactive TTY sessions with shell() for terminal applications and raw byte streaming.

これらの例では、`CWSANDBOX_API_KEY` に設定した CoreWeave API アクセストークンを使用します。Forge の APIキーによる認証については、[はじめに](/ja/products/sandboxes/get-started) を参照してください。CKS の要件については、[配置モード](/ja/products/sandboxes/placement) を参照してください。

インタラクティブな TTY セッションには `Sandbox.shell()` を使用します。生バイトのストリーミングに対応し、出力のバッファリングを行わない `TerminalSession` を返します。対話的な使用向けに設計されています。バッチでコマンドを実行する場合は、代わりに [`exec()`](/ja/products/sandboxes/client/guides/execution) を使用します。

<h2 id="shell-session">
  シェルセッション
</h2>

サンドボックスを作成し、インタラクティブシェルのセッションを開きます。引数なしで `Sandbox.run()` を呼び出すと、デフォルトの長時間実行コマンドが使用されます。以降のサンプルは、このコンテキストが引き続き実行中であることを前提としています。

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

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

`shell()` は常に TTY を割り当て、stdin を有効にします。返される `TerminalSession` は、UTF-8 のデコードやエンコードの往復なしに生のバイトをストリーミングするため、ターミナルのエスケープシーケンスやバイナリ出力に対して安全です。

<h2 id="send-commands-and-read-output">
  コマンドを送信して出力を読み取る
</h2>

ターミナルセッションを開いた状態で、stdin にコマンドを書き込み、リモートシェルからマージされたバイト出力をストリームで返します。

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

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

# 生のバイト出力を反復処理します
for chunk in terminal.output:
    sys.stdout.buffer.write(chunk)
    sys.stdout.buffer.flush()  # セッションの実行中に出力が表示されるようにフラッシュします。

# 終了コードを取得します
exit_code = terminal.wait(timeout=5.0)
```

`TerminalSession` は出力をバッファしません。stdout と stderr は、`terminal.output` 上の単一の生バイトストリームにマージされます。結果に個別の `stdout` 属性や `stderr` 属性はありません。`terminal.output` は継続的に読み取ってください。読み取りを止めると、上限付きキューのバックプレッシャーによってリモートセッションが停止します。

<h2 id="terminal-resize">
  ターミナルのサイズ変更
</h2>

ターミナルのサイズが変わったときに、サイズ変更メッセージを送信します。

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

`resize()` は `TerminalSession` でファイア・アンド・フォーゲットです。

<h2 id="exit-a-shell-session">
  シェルセッションの終了
</h2>

stdin を閉じるか、終了コマンドを送信して、シェルセッションを終了します。

```python theme={"system"}
terminal.stdin.writeline("exit").result()  # リモートシェルに終了を要求します
# または
terminal.stdin.close().result()            # stdin ストリームを閉じます
```

リモートプロセスが終了すると、シェルセッションが完了します。`terminal.wait()` または `terminal.result()` を呼び出して、終了コードが返されるまでブロックします。

<h2 id="commands-and-use-cases">
  コマンドと使用例
</h2>

| 使用例 | 方法 |
| - | - |
| ターミナルから単発のコマンドを実行 | `cwsandbox exec [ID] echo hello` |
| ターミナルからインタラクティブシェルを使用 | `cwsandbox sh [ID]` |
| スクリプトを実行し、出力を取得 (SDK) | `exec(["python", "script.py"])` |
| インタラクティブシェルのセッション (SDK) | `shell(["/bin/bash"])` |
| コマンドに入力を送信 (SDK) | `exec(["cat"], stdin=True)` |
| ターミナルアプリケーション (vim、htop) | `shell(["vim"])` + CLI の raw モード |

<h2 id="see-also">
  関連項目
</h2>

* [コマンドの実行](/ja/products/sandboxes/client/guides/execution) - `exec()` でコマンドを実行します。
* [サンドボックス ログ](/ja/products/sandboxes/client/guides/logging) - コンテナーのログをストリーミングします。
