当前位置: 首页 > 面试题库 >

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

班承德
2023-03-14
问题内容

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

我要运行的代码如下所示:

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不需要):

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


 类似资料:
  • 我正在使用生成一个长时间运行的进程,该进程随时间将输出发送到stdio,并由我的nodejs脚本读取和处理。棘手的部分是,我不能保证发送的命令永远有效。如何捕捉产卵错误?最好不要安装全局异常处理程序,因为我不想处理任何其他异常。(如果这是唯一的方法,我将需要弄清楚生成的进程何时正确启动,然后卸载处理程序,这是一个我不想陷入的混乱。) 我要运行的代码如下所示: 我清楚地知道为什么我会被告知,我知道要

  • 问题内容: 例如,假设我有, 看到我需要从输出中获取旧ID和新ID。但是此sql给我错误“无效的列名’ID’。” http://sqlfiddle.com/#!3/a27b2/1 问题答案: 您不能使用传统输出非插入字段。请改用合并(注意:仅在数据库兼容性> = 100时有效):

  • 我已经在tomcat 7.0.55中部署了一个应用程序进行测试。我想捕获“HeapDumpOnOutOfMemoryError”是否正在发生。以下是我的JVM参数。 JAVA_OPTS="-server-Xms512M-Xmx2048M-XX: PermSize=256m-XX: MaxPermSize=512m-XX: UseConcMarkSweepGC-XX: UseParNewGC-XX:

  • 是否可以使用promises的ES6语法捕获异步错误?例如,以下操作不起作用(.catch未捕获错误): 但是这个同步版本有: 使用try/catch块和清除catch中的错误是执行以下操作的唯一解决方案吗? 对于这个问题,假设抛出错误的代码部分位于另一个命名函数中,因此它没有访问函数的权限。 谢谢 编辑:这里有一个更完整的示例,说明我想在JSFIDLE中做什么。

  • 我很难匹配和捕捉这些。目前我正在尝试以下变体: 我认为sed有一些regex或捕获组行为我不理解

  • 下面是我正在尝试的代码 png是我保存在项目中的一个图像文件。首先,我搜索它,然后点击它。 任何人都可以帮助我如何实现这一点。任何帮助都将得到高度赞赏。