Jak*_*ger 2 stdio child-process node.js
我正在尝试使用 NodeJS 在 shell 中执行一些命令。因此我使用该node:child_process模块。
我使用该spawn函数是为了能够将子进程的输出转发到主进程的控制台。为了保持子进程输出的格式,我传递了该选项stdio: "inherit"(如本问题所述:在执行 child_process.spawn 时保留颜色)。
但如果我添加此选项,子进程事件(退出、断开连接、关闭……)将不再起作用。如果我删除该选项,我会丢失格式,但事件会起作用。有没有办法在子进程关闭时保留格式并得到通知?
(相关)代码:
const { spawn } = require("node:child_process");
let child = spawn("yarn", args, {
stdio: "inherit",
shell: true,
});
child.on("close", (code) => {
console.log(`child process exited with code ${code}`);
});
Run Code Online (Sandbox Code Playgroud)
stdio: 'inherit'意味着您还将 STDIN 转发到子进程,因此如果子进程读取 STDIN,它永远不会退出,并且您的close侦听器将永远不会被调用。尤其是 Node.JS REPL ( yarn node) 的情况。
根据您的需求,您可能想要:
child.kill()。close然后调用监听器,注意是0 code,第二个参数 ( signal) 是SIGTERM(文档);spawn使用stdio: ['ignore', 'inherit', 'inherit'](文档)调用。当子进程自行退出并释放流时,close将调用侦听器。| 归档时间: |
|
| 查看次数: |
1451 次 |
| 最近记录: |