/// <summary> /// 读取编译器进程的输出 /// </summary> /// <param name="proc">进程</param> protected void ReadCompileResult(SandboxProcess proc) { var stdout = new StringBuilder(); proc.Setup(128, 1000, 10); proc.Start(stdout, stdout); proc.WaitForExit(3000); if (!proc.HasExited) { StandardOutput = "Compile Timeout, may have some bad codes."; } else { StandardOutput = stdout.ToString().Trim(); if (StandardOutput != "") { Trace.WriteLine(StandardOutput); } } proc.Kill(6); proc.RefreshState(null); ExitCode = proc.ExitCode; Trace.WriteLine($"Compiler exited with status code {ExitCode}. "); }
/// <summary> /// 创建编译器进程实例 /// </summary> /// <param name="filename">编译器文件</param> /// <param name="arguments">编译器参数</param> /// <returns>进程实例</returns> protected SandboxProcess MakeProcess(string filename, string arguments = "") { Trace.WriteLine(filename + " " + arguments); var ret = SandboxProcess.Create(filename, arguments, true, true); ret.Setup(128, 5, 10); return(ret); }
/// <summary> /// 创建评测进程 /// </summary> /// <param name="filename">文件名称</param> /// <returns>评测进程</returns> public virtual SandboxProcess CreateJudgeProcess(string filename) { return(SandboxProcess.Create(filename + Appendix, stdin: true, cd: true)); }
/// <summary> /// 设置测评进程的参数 /// </summary> /// <param name="proc">测评进程</param> public virtual void SetJudgeEnv(SandboxProcess proc) { }