首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕捉运行在电子中的Node-API模块的stdout/stderr

捕捉运行在电子中的Node-API模块的stdout/stderr
EN

Stack Overflow用户
提问于 2022-05-26 19:56:40
回答 1查看 152关注 0票数 1

我正在开发一个Node模块和一个电子应用程序。N模块正在电子的呈现过程中运行,因为它有一个相当复杂的API,这将很难通过上下文桥,而且我只是计划运行本地资源。但是,none模块完成的打印输出在任何地方都不可见.

我试过侦听process.stdout,这是因为“_read()方法没有实现”而失败:

代码语言:javascript
复制
process.stdout.on("data", (data) => console.log(data));

管道也不工作,因为“无法管道,不可读”:

代码语言:javascript
复制
const duplexStream = new Stream.Duplex();
duplexStream.on("data", (data) => console.log(data));
process.stdout.pipe(duplexStream);

我甚至试图重写stdout.write()方法,该方法实际上适用于来自JavaScript内部的调用,但仍然没有显示来自本机模块的任何内容:

代码语言:javascript
复制
process.stdout.write = (data) => {
    console.log(data);
    return true;
};

那么有什么方法可以从脚本中查看Node模块的stdout/stderr吗?

EN

回答 1

Stack Overflow用户

发布于 2022-05-26 20:59:56

尝试从ELECTRON_ENABLE_LOGGING中启用https://www.electronjs.org/docs/latest/api/environment-variables#electron_enable_logging环境变量,并检查ELECTRON_LOG_FILE

电子似乎对渲染器中的标准输出做了些什么,我现在找不到它,但我想它是故意的。

在您的printf代码中尝试这样做,而不是C++:

代码语言:javascript
复制
// Do this only once per instance initialization
// and then destroy it when exiting
auto console_log = Napi::Persistent(env.Global().Get("console").ToObject()
   .Get("log").As<Napi::Function>());

// Do this to print
console_log.Call({Napi::String::New(env, "Displayed through JS")});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72397377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档