9

我尝试在 Windows 命令提示符下运行以下命令。

abc.exe >log.txt 2>&1

我希望将所有输​​出abc.exe定向到log.txt,但它不起作用,因为log.txt是空的。

但是,如果我只是执行abc.exe,则输出将显示在 Windows 命令提示符中。

我不确定此应用程序使用的输出处理程序是什么(STDOUT 或 STDERR),但我想知道是否有一种方法可以捕获所有消息而不管处理程序如何。

4

2 回答 2

1

附录:从 Windows 10 v1809 开始,Windows终于支持伪控制台。如果可用,这将提供比使用旧控制台 API 更好的解决方案。


如果您确实需要捕获该消息,请使用控制台 API

CreateConsoleScreenBufferSetConsoleActiveScreenBuffer允许您切换到专用的屏幕缓冲区以避免干扰现有的缓冲区。

SetConsoleScreenBufferSize可以使缓冲区足够宽以避免线路翻转。

SetConsoleCursorPosition可以根据需要设置光标位置。

运行程序后,ReadConsoleOutput允许您读取它写入控制台的内容。

然后,您可以使用GetStdHandle(STD_OUTPUT_HANDLE)SetConsoleActiveScreenBuffer将控制台返回到原始缓冲区,并CloseHandle关闭额外的缓冲区。

于 2011-12-23T23:41:07.023 回答
0

重定向到文件时控制台输出不可见的症状可能是由于flush()写入标准输出的程序中缺少。但是,当程序退出(优雅地)或相应的缓冲区填满并自动刷新时,输出应该是可见的。

于 2015-07-14T14:38:34.113 回答