代码之家  ›  专栏  ›  技术社区  ›  Dan-Levi Tømta

似乎不知道如何获取使用spawn启动的进程的输出。标准输出。on('data')未为我输出

  •  0
  • Dan-Levi Tømta  · 技术社区  · 3 年前

    我正在尝试在 game server 为了比赛 Rust . 游戏服务器本身是通过运行其可执行文件RustIdedicated来运行的。exe文件 with some arguments.

    根据一些谷歌搜索和阅读这里关于堆栈溢出的内容,我制作了以下脚本:

    import config from "config";
    import { ChildProcessWithoutNullStreams, spawn } from "child_process";
    
    const GAMESERVERPATH: string =  config.get("Environment.RustDedicatedPath");
    const EXECUTABLE: string =      config.get("Environment.ExecutableFile");
    const GAMESERVERARGS: Array<string> = [
        "-batchmode",
        "+server.port",         `${config.get("Server.port")}`,
        "+server.level",        `"${config.get("Server.level")}"`,
        "+server.seed",         `${config.get("Server.seed")}`,
        "+server.worldsize",    `${config.get("Server.worldsize")}`,
        "+server.maxplayers",   `${config.get("Server.maxplayers")}`,
        "+server.hostname",     `"${config.get("Server.hostname")}"`,
        "+server.description",  `"${config.get("Server.description")}"`,
        "+server.headerimage",  `"${config.get("Server.headerimage")}"`,
        "+rcon.port",           `${config.get("Rcon.port")}`,
        "+rcon.password",       `"${config.get("Rcon.password")}"`,
        "+rcon.web",            `${config.get("Rcon.web")}`
    ];
    
    const gameServerProc : ChildProcessWithoutNullStreams = spawn(
        GAMESERVERPATH+EXECUTABLE,
        GAMESERVERARGS,
        {
            cwd:            GAMESERVERPATH,
            shell:          true,
        }
    );
    
    gameServerProc.stdout.on("data", (data) => {
        console.log(`stdout:${data.toString()}`);
    });
    gameServerProc.stderr.on("data", (data) => {
        console.log(`stderr:${data.toString()}`);
    });
    gameServerProc.on("error", (err) => {
        console.log(`error:${err.message}`);
    });
    

    所发生的事情是,我可以在终端窗口中看到可执行文件的输出,并且服务器正在无错误地启动,但stdout似乎没有启动on('data')事件。 我从没见过 stdout: .

    请参见下面的屏幕截图,我打开了代码,输出在右下角。 Dump of Code

    为什么当可执行文件输出时,我的脚本无法启动(“数据”)?

    0 回复  |  直到 3 年前
        1
  •  0
  •   Dan-Levi Tømta    3 年前

    这个问题与代码无关,而是与游戏引擎的统一性有关。额外的参数 -logFile - 必须存在可执行文件才能输出到标准输出。