如何在 windows 中捕获电子应用程序的标准输出流?
How to capture the stdout stream of an electron application in windows?
我有一个标准的 electron 应用程序(基于 electron-prebuilt),它应该使用以下命令写入标准输出:(在我的项目 main.js 中)
process.stdout.write('stdout write test')
当我从 powershell 启动应用程序并将输出重定向到 txt 文件时,我看到终端 window 中按预期显示的字符串:
> .\App.exe > log.txt
stdout write test
但是当我打开 log.txt 它是一个空白文件。我错过了什么?
编辑:澄清 Ansgar Wiechers 的正确答案:在 windows 命令提示符下,我需要 运行 以下命令:
set ELECTRON_NO_ATTACH_CONSOLE=true
这导致 console.log
和 process.stdout.write
被定向到 windows' stdout 流。
如果你 运行 .\App.exe > log.txt
并且你可以在控制台中看到输出字符串,这意味着该字符串没有在第一时间写入 STDOUT(PowerShell 术语中的成功输出流)地方。
显然,Electron 开发人员决定将 stdout
直接附加到控制台而不是实际的 STDOUT(请参阅 issue #4552). If I understand the discussion there correctly you can set the environment variable ELECTRON_NO_ATTACH_CONSOLE
以避免这种行为。
我有一个标准的 electron 应用程序(基于 electron-prebuilt),它应该使用以下命令写入标准输出:(在我的项目 main.js 中)
process.stdout.write('stdout write test')
当我从 powershell 启动应用程序并将输出重定向到 txt 文件时,我看到终端 window 中按预期显示的字符串:
> .\App.exe > log.txt
stdout write test
但是当我打开 log.txt 它是一个空白文件。我错过了什么?
编辑:澄清 Ansgar Wiechers 的正确答案:在 windows 命令提示符下,我需要 运行 以下命令:
set ELECTRON_NO_ATTACH_CONSOLE=true
这导致 console.log
和 process.stdout.write
被定向到 windows' stdout 流。
如果你 运行 .\App.exe > log.txt
并且你可以在控制台中看到输出字符串,这意味着该字符串没有在第一时间写入 STDOUT(PowerShell 术语中的成功输出流)地方。
显然,Electron 开发人员决定将 stdout
直接附加到控制台而不是实际的 STDOUT(请参阅 issue #4552). If I understand the discussion there correctly you can set the environment variable ELECTRON_NO_ATTACH_CONSOLE
以避免这种行为。