![](/img/trans.png)
[英]NodeJS child_process stdout, if process is waiting for stdin
[英]NodeJS child process not firing close event when writing to STDIN
我正在使用以下代码生成一个子进程,该进程要求用户输入,然后该进程应完成,但是close
事件永远不会触发。
const spawn = require('child_process').spawn;
const p = spawn('script', ['that', 'prompts', 'user', 'for', 'input']);
process.stdin.on('data', (data) => {
p.stdin.write(data);
});
p.on('close', (code) => {
console.log(`child process closed with code ${code}`);
});
如果我生成了一个不提示用户输入的进程(如ls´), the
则将触发close`事件,而不会出现任何问题。 我怀疑有关从父级直接写入子进程的STDIN的某些事情会阻止它正确终止,但我不知道为什么。 我在这里错过明显的东西吗?
我已经通过stdin直接将其写入子进程并对其进行了处理,但是在子进程的stdout上附加了“ finish”事件的侦听器。 也许它将适用于您的用例场景,也许不会。
如果有帮助,您可以阅读我用来实现它的代码。 这里的代码 。 请注意,代码仍然有些凌乱,这是生成模块的基本方法,该模块允许子进程在非根父进程中使用sudo特权运行Linux命令; 为此,我需要一种提供sudo密码的方法。 想法是允许从配置文件,标准输入提示中传递密码,或者从Promise异步解析密码,例如从数据库中获取密码,在该密码中可以加密方式存储密码,也可能在途中未加密。 最终,我想重新审视该代码并将其重写得更好,所以您所看到的只是概念/实验的证明。 它也是用ES6 +(箭头函数,承诺,类,构造函数)编写的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.