You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用spawn启动Java进程并实时获取stdout输出?

解决Node.js spawn启动Minecraft服务器并捕获输出的问题

问题描述

尝试用Node.js的child_process模块spawn函数启动Minecraft服务器,希望获取进程输出,但当前代码无法实现该需求。

原测试代码

var childP = require("child_process")

var server = childP.spawn("java", ["-jar", "Launch.jar", "nogui"])

server.on("spawn", () => {
    console.log("Server started")
})

server.on("message", (message) => {
    console.log(message)
})

server.on("error", (err) => {
    console.log(err)
})

server.on("disconnect", () => {
    console.log("Server disconnected");
})

server.on("exit", (code) => {
    console.log(`Server exited with code ${code}`)
})

修正后的代码

const childP = require("child_process");

const server = childP.spawn("java", ["-jar", "Launch.jar", "nogui"]);

// 监听服务器标准输出
server.stdout.on("data", (data) => {
    console.log(`[Server] ${data.toString().trim()}`);
});

// 监听服务器错误输出
server.stderr.on("data", (data) => {
    console.error(`[Server Error] ${data.toString().trim()}`);
});

server.on("error", (err) => {
    console.error(`启动失败: ${err.message}`);
});

server.on("exit", (code) => {
    console.log(`服务器退出,代码: ${code}`);
});

关键说明

  • spawn事件不存在,child_process.spawn创建的进程启动后直接执行,无需监听该事件
  • message事件仅适用于IPC进程通信场景(比如fork创建的进程调用send方法),Minecraft服务器的输出是通过stdout/stderr流传递的,需要监听这两个流的data事件
  • 捕获到的data是Buffer类型,需用toString()转为字符串,trim()可去除多余换行符
  • 区分stdout和stderr,能更清晰地处理正常输出与错误信息

内容的提问来源于stack exchange,提问作者Green Juzzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:05:16