捕获 execSync 错误

Posted

技术标签:

【中文标题】捕获 execSync 错误【英文标题】:Catching execSync erross 【发布时间】:2016-10-02 11:58:10 【问题描述】:

我正在使用execSync 运行soffice 命令。我遇到的问题是当抛出错误execSync 只是将错误记录到控制台,无法捕获它。我尝试使用 try catch 语句,但它仍然只是将错误记录到控制台。

function convertToPdf(filepath, destpath) 
  var cmd = 'sofice command';

  try 
    var res = execSync(cmd,  encoding: 'utf8' );
   catch (e) 
    console.log("Errors:", e);
   

  console.log("res:", res);


convertToPdf("test.docx");

我运行它并取回它:

Error: source file could not be loaded
res:

请注意,我的 catch 语句从未被记录,即使明确抛出了错误,但另一个 Error: 消息会自动记录,因为我没有记录。

【问题讨论】:

The manual 说“它会抛出”,但仅在某些情况下:“如果进程超时,或者退出代码非零”。你有这些吗? @ÁlvaroGonzález 我怎么知道我什至不能检查退出代码。它所做的只是登录以筛选我在上面发布的内容 我不是 Node 专家,但文档建议(进程超时分开):如果它不抛出错误,则为零,否则为非零(您可以从错误)。由于来自 LibreOffice 的 soffice(假设你是这个意思)是一个 GUI 程序,我不会对它在错误时不返回非零代码感到惊讶。这在大多数 shell 中应该很容易测试。如果你告诉我们你有什么 shell,我们可能会告诉你如何从控制台读取返回值。如果你告诉我们确切的soffice 命令和你得到的错误,我们甚至可以自己重现它。 你是如何解决@Rodrigo 的问题的? 【参考方案1】:

试试这个:

function myExecSync(command, trim = true, cwd = pwd, opts = ) 
  const ret = execSync(command,  cwd, ...opts ).toString('utf-8');
  return trim ? ret.trim() : ret;

并手动编写 stdio: 'pipe' 以防止 childprocess.stderr 输出到控制台。喜欢

myExecSync(command, true, cwd,  stdio: 'pipe' )

【讨论】:

以上是关于捕获 execSync 错误的主要内容,如果未能解决你的问题,请参考以下文章

lua中怎么捕获错误异常信息

前端捕获异常技巧总结

lua中怎么捕获错误异常信息

swift没有捕获firebase firestore权限错误,请尝试捕获

捕获所有错误 psql 函数异常

错误:变量“无法隐式捕获,因为未指定默认捕获模式”