我spawn用来产生一个长时间运行的进程,该进程会随着时间的推移将输出发送到stdio,并由我的nodejs脚本读取和处理。棘手的是,我不能保证发送的命令将始终有效。如何在生成中捕获错误?最好不要涉及安装全局异常处理程序,因为我不想处理任何其他异常。(如果那是唯一的方法,我将需要弄清楚何时生成的进程已正确启动,然后卸载该处理程序,这是我不愿陷入的一团糟。)
spawn
我要运行的代码如下所示:
var spawn = require('child_process').spawn; try { spawn("zargle"); } catch (e) { console.error("I'm handling the error!"); }
但这只会在节点事件循环中的某个地方引发uncaughtException,大概是因为调用是异步的,甚至没有尝试在脚本的时间片上启动子进程。
唯一需要捕获的异常是当spawn根本无法启动进程时(例如,名称不正确且抛出ENOENT)。我(此时)不关心生成的过程可能自行产生的任何问题。
我确切地知道为什么我会得到ENOENT,并且我知道要进行更改以使错误不会发生。我的问题是,如果错误不可避免,该如何应对这种情况。
与节点中的许多事物一样,子进程可以发出一个error事件。为此添加一个侦听器,您将可以捕获它(try- catch不需要):
error
try- catch
var spawn = require('child_process').spawn; var child = spawn('foo'); child.on('error', function(err) { console.log('Oh noez, teh errurz: ' + err); });