将Stdin和Stdout重定向到文件

时间:2008-10-21 04:59:00

标签: shell redirect batch-file stdout stdin

我目前是 C 课程简介的助教。该类正在使用Visual Studio进行教学,但在评分时我只使用一个简单的Windows批处理脚本来处理所有的分配提交,编译它们,在测试文件上运行它们,并将输出重定向到我可以打印的一系列文本文件出来,标记,并交给学生。整个过程非常有效,除了当我重定向stdin时,它不会出现在重定向的stdout中,就像直接在控制台中输入相同的stdin时一样。因此,为控制台格式化的代码输出无法在重定向的输出中正确显示。以下文件片段显示此问题。有谁知道一个简单的解决方案?

文件: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:\>

1 个答案:

答案 0 :(得分:4)

这是预期的(正确的)行为。输入永远不是stdout的一部分。如果你example.exe > output.txt并盲目输入42,你应该期望42在输出中只显示一次。

我能想到的唯一解决方案是终端/ shell将会话记录为一个整体。 Windows命令shell不具备此功能。您可以编写自己的终端代理,它将stdin输入到学生的程序中并读取输出本身,同时以组合方式写出两者。对于另一个程序的执行并且在POSIX(由Cygwin提供给你)下重定向那个stdin / out是很容易的,但我不知道普通的DOS / Windows。