Интерактивный терминал
Псевдотерминал (PTY) нужен программам, которые ожидают интерактивную оболочку, размер терминала или двунаправленный ввод. Вывод поступает во время работы процесса.
При создании терминала задайте user в JavaScript/Python или PTYOptions.User в Go. В этом примере оболочка запускается от root. Если пользователь не задан, используется пользователь шаблона. При повторном подключении пользователь терминала сохраняется.
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.