C#Process.StandardError读取没有阻塞

时间:2016-10-06 10:34:00

标签: c# process

我是一名编程老师,我正在为学生HW(所有是控制台应用程序)开发自动检查程序。基本上,我使用一些Process.Start()(带有一些输入文件)运行学生代码,并检查它的输出是否符合预期。 如果由于某种原因,学生代码没有成功完成,我会使用进程标准错误重定向向他们发送代码抛出的异常。

然而,我想做得更好。我想找到写入进程StandartInput的输入行,然后发生异常。我怎样才能做到这一点?我当前的代码或多或少:

ProcessStartInfo psi = new ProcessStartInfo(students_exe_path);
psi.UseShellExecute = false;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;

String randomInputFile = randomInputFilesFolder + "\\" + "test.txt";
psi.WorkingDirectory = randomInputFilesFolder;
Process p = Process.Start(psi);
StreamWriter inputWriter = p.StandardInput;
String[] inputLines = File.ReadAllLines(randomInputFile);
foreach (String line in inputLines)
{
    // here I wanted to read the standart error so far (before writing next input line)
    String errorTextBefore = p.StandardError.ReadToEnd(); // can not use this because blocks progress.

    inputWriter.WriteLine(line); // sending next input line to students app

    // here I wanted to read the standart error so far (after writing next input line)
    String errorTextAfter = p.StandardError.ReadToEnd(); // can not use because blocks
    if (errorTextBefore != errorTextAfter) Console.WriteLine("Line {0} caused the exception",line);
}

或许我可以从p.StandartInput检查哪个文本没有被这个过程“消耗”?

塔米尔

0 个答案:

没有答案