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

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

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

При создании терминала задайте user в JavaScript/Python или PTYOptions.User в Go. В этом примере оболочка запускается от root. Если пользователь не задан, используется пользователь шаблона. При повторном подключении пользователь терминала сохраняется.

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

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

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

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

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

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