【问题标题】:How to extract the error from a stderr in nodejs childprocess如何从nodejs子进程中的stderr中提取错误
【发布时间】:2020-04-29 09:42:45
【问题描述】:

我在google或其他地方一直没能找到答案,希望你能指导一下。

我有一个 node.js 应用程序调用一个有时会失败的可执行文件 (.exe),我的代码如下:

const converter = childProcess.spawn('converter.exe', [source, destination], options);
converter.stdout.on('data', (data) => {

});
converter.on('close', (code) => {
    console.log(`Child process exited with code ${code}`);
});
converter.stderr.on('data', (data) => {

});

一切正常,但是当我得到一个标准错误时,我不知道如何获取消息,我记录了数据并得到了这个: 标准错误:

我可以使用.toString()得到一个字符串,字符串如下:

stderr:  Traceback (most recent call last):
  File "converter.pyw", line 23, in <module>
    doc = word.Documents.Open(source_file)
_ctypes.COMError: (-2146822496, None, ('El archivo parece estar corrompido.', 'Microsoft Word', 'wdmain11.chm', 25272, None))

我现在的疑问是,是否可以只提取错误消息?在这种情况下,错误消息是 El archivo parece estar corrompido。

我什至尝试使用 JSON 对象来解析它,但我没有运气。

编辑: 当我控制.exe 文件的生成时,我将尝试使用除代码块之外的一些尝试(是的,它是 python 代码),但我不知道我是否仍会得到像 sterr: Traceback 这样的文本...我会编辑我一拿到结果就问这个问题。

【问题讨论】:

  • 如果您可以编辑您的问题并将这些图像更改为实际的文本代码,那就太好了。
  • 我是为字符串部分做的,因为缓冲区很大,我无法复制它

标签: node.js child-process stderr


【解决方案1】:

正如我从一开始就期望的那样,没有内置方法可以提取我从我的 exe 文件中得到的错误,错误是一个字符串,可以通过计算得到错误消息,但这可能很复杂。

我尝试在我的 python 代码中使用 try except 块,该代码后来被编译到 exe 文件中,它看起来像:

try:

except:
    sys.stderr.write('Error')

现在,我的错误处理函数的输出是:

Error

我猜最后的答案是控制子进程文件的输出。

【讨论】:

  • 我不了解 Windows,但在 Unixen(MacOS、Linux、BSD、Illumos、WSL 上的 Linux 等)上,您也可以返回退出代码。成功退出代码始终为 0,失败退出代码非零,但您可以使用任何整数表示失败,以指示不同类型的错误。当然,返回退出代码意味着您需要退出该过程。这对于命令行实用程序很有用,但如果您的进程是服务器,则可能没有用
  • ...您知道在 C/C++ 中如何使用 int main () {... - 意思是 main 返回一个 int 值吗?在 Unix(C 被发明的地方)上,返回值是退出代码。很明显,由于 Windows 支持 C/C++,您可以返回退出代码(我假设大多数语言也允许这样做),但我只是不知道 Windows 如何处理它,或者它是否将它传递给您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2013-08-26
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多