【问题标题】:Redirect Stdin and Stdout to File将标准输入和标准输出重定向到文件
【发布时间】:2008-10-21 04:58:59
【问题描述】:

我目前是C 简介 课程的助教。该课程是使用 Visual Studio 教授的,但是在评分时,我只使用一个简单的 Windows 批处理脚本来处理所有提交的作业、编译它们、在测试文件上运行它们,并将输出重定向到我可以打印的一系列文本文件出来,做标记,然后交还给学生。整个过程运行良好,除了当我重定向标准输入时,它不会像直接在控制台中输入相同的标准输入时那样出现在重定向的标准输出中。因此,为控制台格式化的代码输出不会在重定向输出中正确显示。以下文件 sn-ps 显示了此问题。有谁知道一个简单的解决方案?

文件:example.c

#include <stdio.h>

int main()
{
    int v;
    printf("Enter a number: ");
    scanf("%i", &v);
    printf("You entered: %d\n", v);
    return 0;
}

文件:input.txt

42

输出(控制台)

C:\>example.exe
Enter a number: 42
You entered: 42

C:\>

输出(重定向)

C:\>example.exe < input.txt > output.txt

C:\>more output.txt
Enter a number: You entered: 42

C:\>

【问题讨论】:

    标签: shell redirect batch-file stdout stdin


    【解决方案1】:

    这是预期的(正确的)行为。输入永远不是标准输出的一部分。如果您执行example.exe &gt; output.txt 并盲目输入 42,您应该期望 42 在输出中也只出现一次。

    我能想到的唯一解决方案是终端/shell 将会话记录为一个整体。 Windows 命令外壳无法做到这一点。不过,您可以编写自己的终端代理,它将标准输入输入学生的程序并读取输出本身,同时以组合方式写出两者。在 POSIX(由 Cygwin 提供给您)下分叉以执行另一个程序并重定向该程序的标准输入/输出非常容易,但我不知道普通的 DOS/Windows。

    【讨论】:

    • 我意识到我看到的行为是正确的。我想做的是用脚本伪造控制台设置的行为。您是否有关于如何使用 POSIX 执行此操作的简短示例? (我以前曾与 Cygwin/*nix 广泛合作过,如果需要的话,使用其中任何一种都没有问题。)
    • 在这里寻找一个很好的分叉 w/ 重定向的例子,然后执行:publicabstractvoid.blogspot.com/2008/01/…
    • 如果您不知道如何创建文件 desc。您可以通过它进行重定向,尝试使用 UNIX 管道。
    猜你喜欢
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多