我试图在Windows命令提示符下运行以下命令。
abc.exe >log.txt 2>&1
我期望从abc.exe
所有输出被定向到log.txt
,但它不起作用,因为log.txt
是空的。
但是,如果我只是执行abc.exe
,输出显示在Windows命令提示符下。
我不知道该应用程序(STDOUT或STDERR)使用的输出处理程序是什么,但是我想知道是否有办法捕获所有消息,而不pipe处理程序。
如果您确实需要捕获该消息,请使用控制台API。
CreateConsoleScreenBuffer和SetConsoleActiveScreenBuffer允许您切换到专用屏幕缓冲区,以避免干扰现有的。
SetConsoleScreenBufferSize可以使缓冲区足够宽,以避免线翻转。
SetConsoleCursorPosition可以根据需要设置光标位置。
运行该程序后,ReadConsoleOutput允许您读取写入控制台的内容。
然后,您可以使用GetStdHandle(STD_OUTPUT_HANDLE)和SetConsoleActiveScreenBuffer将控制台返回到原始缓冲区,并使用CloseHandle关闭额外的缓冲区。
重定向到文件时控制台输出不可见的症状可能是由于写入标准输出的程序中缺少flush()
。 但是,程序退出(正常)或相应的缓冲区填满并自动刷新时,应显示输出。
我看到了问题…首先你的标准输出写入文件,然后你的错误输出覆盖它 – 所以如果你没有任何错误,你会得到一个空白的文件!
相反,尝试将错误输出附加到同一个文件,如下所示:
abc.exe >log.txt 2>>&1