我正在运行各种 Java 基准测试,并希望将结果存档。我像这样执行 (dacapo) 基准测试:
C:\VM\jre\bin\java -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=%
我通过参数传递基准类型,这就是 %arg1%。
您可以看到我正在将输出重定向到一个文本文件。不幸的是,输出的第一行和最后一行仍然打印在控制台中,而不是文本文件中:
===== DaCapo 9.12 luindex starting =====
===== DaCapo 9.12 luindex PASSED in 2000 msec =====
特别是文本文件中的最后一行很重要:)
是否有强制执行此行为的技巧?
最佳答案
您必须重定向 STDOUT 和 STDERR。
命令 > 日志文件 2>&1
STDIN 是文件描述符 #0,STDOUT 是文件描述符 #1,STDERR 是文件描述符 #2。
正如“command > file”将 STDOUT 重定向到一个文件一样,您也可以将任意文件描述符相互重定向。 >&
运算符在文件描述符之间重定向。因此,2 >& 1
将所有 STDERR 输出重定向到 STDOUT。
此外,注意在指令末尾添加 2>&1
,因为在 Windows 上,重定向的顺序很重要,因为 command 2>&1 > logfile
将正如 Dawid 在评论中添加的那样,生成一个空文件。
关于Windows 批处理脚本 : Redirect ALL output to a file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15346863/