【问题标题】:How can i capture the input and output to a file when running a program?运行程序时如何捕获文件的输入和输出?
【发布时间】:2012-04-25 19:11:10
【问题描述】:

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

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

我不擅长 linux 命令,尽管我尽我所能去 google,所以如果你知道你的帮助将不胜感激!

例如,如果输入文件中有:

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

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

【问题讨论】:

    标签: c++ linux input terminal


    【解决方案1】:

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

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

    问题更改后更新

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

    【讨论】:

    • 不打印我们向内重定向的任何输入。我希望将其包含在打字稿中。我们该怎么做?
    • 你到底是什么意思?我们看着猫人,我们仍然不确定如何使用它来做我们想做的事?有什么办法可以详细说明?
    【解决方案2】:

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

    【讨论】:

    • 这不会完全符合我的要求
    【解决方案3】:

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

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

    【讨论】:

    • 我希望可以,但我的代码有数千行输出,我认为这不明智
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多