如何在运行程序时捕获输入和输出到文件?

时间:2012-04-13 12:08:27

标签: c++ linux input terminal

我在c ++工作,我需要一些方法来捕获控制台的输入和输出,就像我直接通过终端一样。

所以假设我有一个可执行的test.exe和一个输入文件input.txt,我想将输入和输出的组合保存到console.out我需要做什么终端命令?

我在linux命令方面不是很好,即使我尽力去谷歌,所以如果你知道你的帮助会非常感激!

例如,如果输入文件包含在其中:

show
ignore
hide

并且在使用此输入运行我的程序后,输出文件包含在其中:

Enter Command: 
/****SHOWING DATA!****/
Enter Command:
/****IGNORING DATA!***/
Enter Command:
/***HIDING DATA!***/

我想要一个看起来像这样的文件:

Enter Command: show
/****SHOWING DATA!****/
Enter Command:ignore
/****IGNORING DATA!***/
Enter Command:hide
/***HIDING DATA!***/

这样可以捕获我在终端中看到的内容,如果我在没有任何重定向的情况下运行它。

3 个答案:

答案 0 :(得分:2)

script命令可能符合您的需求。它将记录输入和输出,并将其保存到文件中。唯一的问题是它有记录命令行或输入编辑的习惯,所以你可能需要稍微清理一下输出。 Here is a link可以解释一下。

只需在命令行输入script即可启动该实用程序。然后你会运行你的程序。键入Control + D(^ D)告诉script实用程序停止录制。输出将位于您启动的目录中名为typescript.out的文件中。

更改问题后更新

基于这个新问题,我认为你不能轻易完成你的要求。只有程序知道它消耗了stdin的输入量。在提出下一个提示之前,没有好的方法可以知道程序读取标准输入,直到遇到换行符。

答案 1 :(得分:1)

您可以尝试重定向> console.out来捕获输出。 script命令将捕获整个会话。

答案 2 :(得分:0)

让您的程序除了输出到屏幕外,还输出到文件中。由于您正在解析用户输入的命令,您还应该从变量中访问它们,只输出它们。

//PSEUDO-CODE!
std::ofstream fout;
fout.open("output.txt");
std::cout << "Enter Command: ";
fout << "Enter Command: ";
std::cin >> cmd;
fout << cmd << '\n';
//..Output results to file.