控制台上不同的输出打印标准输出/重定向到文件

时间:2016-05-26 01:05:22

标签: c++ bash math g++ stdout

我在bash上遇到stdout问题。 首先,我有一个名为 Channel_Flow 的程序,它由C ++语言编写。该程序基本上计算了计算流体动力学领域的一些数学。

我使用此问题时会发生问题:
$ ./Channel_Flow
对于我的节目。

当我重定向输出时输出不同,如:
$ ./Channel_Flow > result.dat

差异非常大,一些数学计算和表现不同。我之前从未遇到过这种错误 我执行程序的方式有什么问题吗?有人暗示过这个吗?

谢谢。如果我需要添加一些细节,我很乐意编辑这个问题 (有关其他信息,我使用makefile使用--c ++ 11标志编译文件,使用g ++ 5.3.1编译器编译-O2优化标志)

修改 我添加了后一个命令的一些输出:
substep - 1 1 1 10 : -18693.7 2 1 10 : -18693.7 3 1 10 : -18693.7 4 1 10 : -18693.7 5 1 10 : -18693.7 6 1 10 : -18693.7 7 1 10 : -18693.7 8 1 10 : -18693.7 9 1 10 : -18693.7

从第一个命令开始,我得到了这个:

substep - 1 1 1 10 : 3.47858 2 1 10 : 3.47858 3 1 10 : 3.47858 4 1 10 : 3.47858 5 1 10 : 3.47858 6 1 10 : 3.47858 7 1 10 : 3.47858 8 1 10 : 3.47858 9 1 10 : 3.47858

代码很复杂,所以我仍在搜索问题根源的位置。我在这里问的是,为什么我的输出在将其写入文件时会有不同的结果? 正确的是控制台输出。

我试过这个:(正如第一个答案所示)。

# have a specific error file
./Channel_Flow > result.dat 2>errors.log
#or all to the same:
./Channel_Flow > result.dat 2>&1

但文件errors.log为空。第二个命令给出了完全相同的结果 再次编辑

我使用offstream打印结果

std::ofstream testing("testing.dat");
if (k==0)  {
  testing  <<  i << " " << j << " " << k << " : " << ux[i][j][k] << std::endl;  
  std::cout  <<  i << " " << j << " " << k << " : " << ux[i][j][k] << std::endl;  
}

我使用第一个命令:

$ ./Channel_Flow

输出:
substep - 1 1 1 10 : -18693.7 2 1 10 : -18693.7 3 1 10 : -18693.7 4 1 10 : -18693.7 5 1 10 : -18693.7 6 1 10 : -18693.7 7 1 10 : -18693.7 8 1 10 : -18693.7 9 1 10 : -18693.7

(在两个流文件(testing.dat)和控制台界面上)
我使用第二个命令:

$ ./Channel_Flow > result.dat

输出:
substep - 1 1 1 10 : 3.47858 2 1 10 : 3.47858 3 1 10 : 3.47858 4 1 10 : 3.47858 5 1 10 : 3.47858 6 1 10 : 3.47858 7 1 10 : 3.47858 8 1 10 : 3.47858 9 1 10 : 3.47858

(在两个流文件(testing.dat)和控制台界面上)

1 个答案:

答案 0 :(得分:1)

这可能是因为你有事情要stdout而其他事情要转到stderr,你可能会以不同方式重定向。

  • - 即标准输出是来自该计划的正常事项。

  • - 即错误输出,我猜你猜。

因此,在您的情况下,使用./Channel_Flow > result.dat,您只需将stdout重定向到result.dat,并在控制台中显示stderr

如果你想要每件事都去文件:

# have a specific error file
./Channel_Flow > result.dat 2>errors.log
#or all to the same:
./Channel_Flow > result.dat 2>&1

修改

使用

查看您的案例中会发生什么
## and this latest would both log to console and write to file:
./Channel_Flow |tee result.dat