Интерактивный терминал
Псевдотерминал (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 также можно изменить размер, отключить, подключить повторно и завершить. Эти операции и настройки времени ожидания описаны в справочнике команд.