1

我正在使用 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!***/

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

4

3 回答 3

2

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

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

问题更改后更新

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

于 2012-04-13T12:13:17.793 回答
1

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

于 2012-04-13T12:12:27.807 回答
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.
于 2012-04-13T12:37:09.137 回答