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

How can i capture the input and output to a file when running a program?

本文关键字:文件 输入 输出 运行 程序      更新时间:2023-10-16

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

因此,假设我有一个可执行测试.exe和一个输入文件输入.txt并且我想将输入和输出的组合保存到控制台。

我不擅长 linux 命令,即使我尽力谷歌,所以如果你知道你的帮助将不胜感激!

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

show
ignore
hide

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

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!***/

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

script 命令可能满足您的需求。 它将记录输入和输出,并将其保存到文件中。 唯一的问题是它也有记录命令行或输入编辑的习惯,因此您可能需要稍微清理一下输出。 这是一个链接,可以稍微解释一下。

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

问题更改后更新

基于新问题,我认为你不容易完成你所问的。 只有程序知道它消耗了多少stdin输入。 没有好方法可以知道程序在遇到换行符之前会读取标准输入,然后再显示下一个提示。

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

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

//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.