【发布时间】:2016-03-16 11:38:59
【问题描述】:
我正在使用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,并且我知道要改变什么才能不发生错误。我的问题是,如果错误是不可避免的,如何优雅地应对这种情况。
【问题讨论】:
标签: node.js child-process