Перейти к содержимому

Интерактивный терминал

Псевдотерминал (PTY) нужен программам, которые ожидают интерактивную оболочку, размер терминала или двунаправленный ввод. В отличие от commands.run, вывод поступает ещё во время работы процесса.

mjs
import { Sandbox } from "@abox-dev/sdk";

const sandbox = await Sandbox.create();
const output = [];

try {
  const terminal = await sandbox.pty.create({
    cols: 80,
    rows: 24,
    onData: (data) => output.push(new TextDecoder().decode(data)),
  });

  await sandbox.pty.sendInput(
    terminal.pid,
    new TextEncoder().encode("printf 'hello from PTY\\n'\nexit\n"),
  );
  await terminal.wait();
  console.log(output.join(""));
} finally {
  await sandbox.kill();
}

Ввод передаётся в виде байтов. Добавьте перевод строки, если нужно имитировать нажатие Enter. Интерактивная оболочка не завершается сама: перед ожиданием результата отправьте exit или остановите PTY.

PTY также можно изменить размер, отключить, подключить повторно и завершить. Эти операции и настройки времени ожидания описаны в справочнике команд.