如何在Windows中捕获Electron应用程序的标准输出流?

4

我有一个标准的Electron应用程序(基于electron-prebuilt),应该使用以下命令向标准输出写入内容:(在我的项目main.js文件中)

process.stdout.write('stdout write test')

当我从PowerShell启动应用程序并将输出重定向到文本文件时,我如预期地在终端窗口中看到了字符串显示。
> .\App.exe > log.txt

标准输出写入测试

但是当我打开log.txt文件时,它是一个空文件。我错过了什么吗?

编辑:为了澄清Ansgar Wiechers的正确答案:在Windows命令提示符中,我需要运行以下命令:

set ELECTRON_NO_ATTACH_CONSOLE=true

这会导致 console.log process.stdout.write 的输出被重定向到 Windows 的 stdout 流中。

你尝试过调用命令吗? - lloyd
1个回答

3
如果你运行.\App.exe > log.txt并且你可以在控制台中看到输出字符串,那么这意味着该字符串根本没有被写入STDOUT(在PowerShell术语中为"Success"输出流)。

显然,Electron开发人员决定直接将stdout附加到控制台,而不是实际的STDOUT(请参见issue#4552)。如果我正确理解了那里的讨论,你可以设置环境变量ELECTRON_NO_ATTACH_CONSOLE来避免这种行为。

啊,我曾经尝试在PowerShell中设置该环境变量 - 但是Electron没有识别它,但是从cmd中设置它完美地解决了问题。谢谢! - matt lohkamp
1
未经测试,但通常在PowerShell中设置$env:ELECTRON_NO_ATTACH_CONSOLE='true'应该与在CMD中设置set ELECTRON_NO_ATTACH_CONSOLE=true相同。 - Ansgar Wiechers
是的,我意识到PowerShell中的“set”只是“Set-Variable”的别名,而这并不是我想要的变量。 - matt lohkamp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接