如何使用 nodejs child_process.spawn 捕获 ENOENT?
How to catch an ENOENT with nodejs child_process.spawn?
我正在使用 spawn
生成一个长 运行ning 进程,该进程随时间将输出发送到 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);
});
你可以尝试用process uncaughtException事件来捕获它。
但我相信剩下的任务并不容易。
process.on('uncaughtException', function (err) {
console.log(err);
});
就像mscdex所说的,你必须附加'error'事件,但是,你应该添加try catch因为一些错误,比如EPERM 不触发错误事件并抛出 Error 异常。
var spawn = require('child_process').spawn;
try{
var child = spawn('foo');
child.on('error', function(err) {
console.log('Oh noez, teh errurz: ' + err);
});
}catch(err){
console.log("exception: "+err)
}
我正在使用 spawn
生成一个长 运行ning 进程,该进程随时间将输出发送到 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);
});
你可以尝试用process uncaughtException事件来捕获它。 但我相信剩下的任务并不容易。
process.on('uncaughtException', function (err) {
console.log(err);
});
就像mscdex所说的,你必须附加'error'事件,但是,你应该添加try catch因为一些错误,比如EPERM 不触发错误事件并抛出 Error 异常。
var spawn = require('child_process').spawn;
try{
var child = spawn('foo');
child.on('error', function(err) {
console.log('Oh noez, teh errurz: ' + err);
});
}catch(err){
console.log("exception: "+err)
}