我正在运行各种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 =====
特别是最后一行在文本文件中很重要:)
有强迫这种行为的技巧吗?
答案 0 :(得分:53)
您必须重定向 STDOUT 和 STDERR 。
command > logfile 2>&1
STDIN 是文件描述符#0, STDOUT 是文件描述符#1而 STDERR 是文件描述符#2。
就像“command> file”将 STDOUT 重定向到文件一样,您也可以将任意文件描述符重定向到彼此。 >&
运算符在文件描述符之间重定向。因此,2 >& 1
将所有 STDERR 输出重定向到 STDOUT 。
此外,请注意在指令末尾添加2>&1
,因为在Windows上,重定向的顺序很重要,因为command 2>&1 > logfile
将生成一个空文件,正如Dawid在评论中添加的那样。 / p>
答案 1 :(得分:5)
在命令中添加2>& 1:
C:\VM\jre\bin\java -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=%
这会将STDERR重定向到STDOUT,然后重定向到您的文本文件。