我尝试在Windows命令提示符中运行以下命令。
abc.exe >log.txt 2>&1
我希望所有来自
abc.exe
的输出都能被重定向到log.txt
,但实际上并没有起作用,因为log.txt
是空的。然而,如果我只是执行
abc.exe
,输出会显示在Windows命令提示符中。我不确定该应用程序使用的是哪种输出处理程序(STDOUT还是STDERR),但我想知道是否有一种方法可以捕获所有消息,而不管处理程序如何。
我尝试在Windows命令提示符中运行以下命令。
abc.exe >log.txt 2>&1
abc.exe
的输出都能被重定向到log.txt
,但实际上并没有起作用,因为log.txt
是空的。abc.exe
,输出会显示在Windows命令提示符中。补充:自Windows 10 v1809起,Windows 终于支持伪控制台。如果可用,这比使用传统的控制台API提供了更好的解决方案。
如果你真的需要捕获那个消息,使用控制台 API。
CreateConsoleScreenBuffer
和 SetConsoleActiveScreenBuffer
允许您切换到专用屏幕缓冲区,避免干扰现有的屏幕缓冲区。
SetConsoleScreenBufferSize
可以使缓冲区足够宽,以避免行溢出。
SetConsoleCursorPosition
可以根据需要设置光标位置。
程序运行后,ReadConsoleOutput
允许您读取它写入控制台的内容。
然后可以使用 GetStdHandle(STD_OUTPUT_HANDLE)
和 SetConsoleActiveScreenBuffer
将控制台返回到原始缓冲区,并使用 CloseHandle
关闭额外的缓冲区。
(echo hello & echo world>con)>file.txt
命令会将 world
输出到屏幕上,而你只能将 hello
写入文件。这样可以确保用户在代码块或整个脚本被重定向时仍能在屏幕上看到关键信息。 - Stephanflush()
引起的。但是,当程序正常退出或相应的缓冲区填满并自动刷新时,输出应该是可见的。
perl abc.exe >log.txt 2>&1
。 - runabc.exe >con 2>&1
时,您会看到什么? - aschipfl