node.js – 如何使用nodejs child_process.spawn捕获ENOENT?

我正在使用spawn来生成一个长时间运行的进程,该进程随着时间的推移将输出发送到stdio,并由我的nodejs脚本读取和处理.棘手的部分是我无法保证发送的命令始终有效.如何在产卵时发现错误?最好这不涉及安装全局异常处理程序,因为我不想处理任何其他异常. (如果这是唯一的方法,我需要弄清楚生成的进程何时正确启动然后卸载处理程序,这是一个混乱,我宁愿不进入.)

我想要运行的代码是这样的:

var spawn = require('child_process').spawn;

try {
    spawn("zargle");
} catch (e) {
    console.error("I'm handling the error!");
}

但这只会在节点事件循环中的某处引发一个uncaughtException,大概是因为调用是异步的,甚至没有尝试在我的脚本的时间片上启动子进程.

需要捕获的唯一异常是当spawn完全无法启动进程时(例如,名称不正确并且抛出ENOENT).我(此时)并不关心衍生过程可能产生的任何问题.

相似但不同:How do I debug “Error: spawn ENOENT” on node.js?

我确切地知道为什么我会获得ENOENT,而且我知道要改变什么以避免错误发生.我的问题是如果错误是不可避免的,如何优雅地回应这种情况.

解决方法

与节点中的许多内容一样,子进程可以发出 error event.为此添加一个侦听器,您将能够捕获它(不需要try-catch):

var spawn = require('child_process').spawn;
var child = spawn('foo');
child.on('error',function(err) {
  console.log('Oh noez,teh errurz: ' + err);
});

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...