Перенаправить стандартный ввод и стандартный вывод в файл
В настоящее время я ассистент по обучению для введения в класс 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 ответ
Это ожидаемое (правильное) поведение. Ввод никогда не является частью стандартного вывода. Если вы делаете example.exe > output.txt
и вслепую введите 42, вы должны ожидать, что 42 также появляется только один раз в выходных данных.
Единственное решение, о котором я мог подумать, это то, что терминал / оболочка записывает сессию целиком. Командная оболочка Windows не способна на это. Вы могли бы написать свой собственный терминальный прокси, который вводит стандартный ввод в программу учащегося и считывает сам вывод, одновременно записывая оба в комбинированном виде. Это довольно легко разветвить для выполнения другой программы и перенаправить его stdin / out под POSIX (предоставленный вам Cygwin), хотя я не знаю о простой DOS/Windows, хотя.