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

标签 c++ bash math g++ stdout

我对 bash 上的标准输出有疑问。 首先,我有一个名为Channel_Flow 的程序,它是用C++ 语言编写的。该程序主要计算计算流体动力学领域的一些数学。

当我使用这个时我的问题出现了:
$ ./Channel_Flow
对于我的程序。

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

差异非常显着,一些数学计算和行为不同。我以前从来没有遇到过这种错误。
我执行程序的方式有什么问题吗?有人对此有提示吗?

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

编辑 我添加了后一个命令的一些输出:
子步骤 - 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

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

子步骤 - 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

输出:
子步骤 - 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

输出:
子步骤 - 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 

关于c++ - 控制台上的不同输出打印标准输出/重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37449948/

相关文章:

c++ - 将左值与抽象类一起使用

安卓 : How to get the preferred (native) audio buffer size and audio sample rate in C/C++?

bash - 简单地将命令的输出 fork 并重定向到/dev/null

bash - 如何枚举文件列表

Safari 上的 JavaScript 错误

c++ - 程序运行良好数小时,最终出现内存地址 0x10 的段错误

c++ - 动态规划问题

linux - 抓取屏幕输出并解析为 csv 的 bash 脚本

algorithm - 在 O(1) 中高效地计算序列 2、2、4、2、4、6、2、4、6、8 ... 的第 i 个元素

javascript - 将 1 个正方形旋转到第二个正方形的中心点