Перенаправить стандартный ввод и стандартный вывод в файл - PullRequest
2 голосов
/ 21 октября 2008

В настоящее время я ассистент по обучению для Введение в класс C . Преподавание этого класса ведется с использованием Visual Studio, но при оценке я просто использую простой пакетный сценарий Windows для обработки всех отправленных заданий, их компиляции, запуска в тестовом файле и перенаправления вывода в серию текстовых файлов, которые я могу напечатать разметить и передать студентам. Весь процесс работает очень хорошо, за исключением того факта, что когда я перенаправляю стандартный ввод, он не отображается в перенаправленном стандартном выводе так же, как при вводе того же самого стандартного ввода непосредственно в консоль. Из-за этого вывод кода, отформатированного для консоли, не отображается правильно в перенаправленном выводе. Следующие фрагменты файла показывают эту проблему. Кто-нибудь знает простое решение?

Файл: 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 Ответ

4 голосов
/ 21 октября 2008

Это ожидаемое (правильное) поведение. Ввод никогда не является частью стандартного вывода. Если вы наберете example.exe > output.txt и вслепую наберете 42, вы должны ожидать, что 42 также появляется только один раз в выводе.

Единственное решение, о котором я мог подумать, это то, что терминал / оболочка записывает сессию целиком. Командная оболочка Windows не способна на это. Вы могли бы написать свой собственный терминальный прокси, который вводит стандартный ввод в программу учащегося и считывает сам вывод, одновременно записывая оба в комбинированном виде. Довольно легко разветвиться для выполнения другой программы и перенаправить ее стандартный вывод в POSIX (предоставленный вам Cygwin), хотя я не знаю о простой DOS / Windows.

...