我在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)和控制台界面上)
这可能是因为你有事情去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