0

我正在使用 xterm.js、react 和 node-pty 设置浏览器内终端。我已经通过 websockets 在服务器上运行了 node-pty 进程。终端实际工作,它在反应 UI 中可见。我可以使用以下方法将终端初始化为nodepython3首次加载:

        client.tty = pty.spawn("node", [], {
            name: "xterm-color",
            cols: 80,
            rows: 24,
            cwd: process.env.PWD,
            env: process.env
        });

我可以像这样杀死这个过程:

    self.on("message", function(client, msg) {
        if (msg === "kill") {
          client.tty.kill(9);        
        }
        client.tty && client.tty.write(msg);
    });

只要在 UI 的终端中输入字符,就会触发此侦听器。

这感觉不像是处理这个问题的惯用方式,但我想做的是从 UI 中的 websocket 发出一条消息,这取决于反应状态,并node-pty使用不同的初始 shell 重新生成一个新终端,即从 切换nodepython3

我发现销毁终端所在的 HTML 节点会导致open服务器上的侦听器再次触发,但我认为重新打开时不可能包含消息。

    self.on("open", (client, test) => {
        client.tty = pty.spawn("node", [], {
            name: "xterm-color",
            cols: 80,
            rows: 24,
            cwd: process.env.PWD,
            env: process.env
        });

        const ttyId = client.tty._pty
        client.tty.on("exit", function(code, signal) {
            client.tty = null;
            client.close();
        });

        client.tty.on("data", (data) => {
            client.send(data);
        });
    });

我的问题是,如何重新生成node-pty进程并动态更改 shell 类型?

4

0 回答 0