繁体   English   中英

写入STDIN时,NodeJS子进程未触发关闭事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM