javascript - 当使用带有 {stdio: 'inherit'} 的 child_process.spawn() 方法时,父进程是否可以从子进程接收输出?
问题描述
我试过阅读 subprocess.stdout 但节点文档清楚地指出“如果孩子是在 stdio[1] 设置为'管道'以外的任何东西的情况下产生的,那么这将是空的。” 这不是我想要的,因为我需要继承。
还尝试在我的子进程中使用 process.send() ,但这也不起作用。
这是我的代码顺便说一句:
const {spawn} = require('child_process');
const child = spawn('node index.js', {
shell: process.env.ComSpec,
stdio: 'inherit'
});
解决方案
是的,您可以在此处的 Node.js 文档中找到答案。
如果您在 Windows 上运行它,请阅读本节,您将需要确保子进程在终端中运行(Windows 上的 cmd.exe)。
您应该能够使用:
const child = spawn('node index.js', ['/c', 'my.bat']);
或者
exec('node index.js', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
基本上调用“ spawn(...) ”将返回一个 ChildProcess,它是一个EvenEmitter。它有两个输出流,“ stderr ”、“ stdout ”,您将在它们上监听“数据”事件。
- 您从“ stderr ”流上的衍生(子)进程读取错误输出。
- 您从“ stdout ”流上的衍生(子)进程读取正常输出。
如何监听正常输出和错误:
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
要知道子进程何时存在,请监听“ close ”事件
child.on('close', (code) => {
// Perform cleanup.
});
推荐阅读
- geodjango - 多边形连接中的 Geodjango 点没有循环
- wordpress - 将自定义字体添加到可视化作曲家问题
- wordpress - 当我尝试将我构建的静态页面设置为主页时,它会给出一个错误,提示重定向过多
- java - OpencCv - 在“warpAffine”或“warpPerspective”(投影变换/形态学操作)之后将像素映射到新位置
- memory-management - 如果使用倒置页表,是否需要当前位?
- javascript - 具有 promise 方法的等待函数
- javascript - 反应 - 回调 - 3 个组件
- python - 如何将字符串数组转换为具有条件的结构数组
- python - Django 模板语言中是否有 isfile() 或 isdir() 的等价物?
- javascript - jquery click() 按钮然后告诉我是否完成