43

我正在运行各种 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 =====

特别是最后一行在文本文件中很重要:)

有没有办法强迫这种行为?

4

2 回答 2

80

您必须重定向STDOUTSTDERR

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 在评论中添加的那样。

于 2013-03-11T19:27:59.010 回答
8

将 2>&1 添加到您的命令中:

 C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=% 

这会将 STDERR 重定向到 STDOUT,然后将其重定向到您的文本文件中。

于 2013-03-11T19:27:50.523 回答