@@ -106,20 +106,26 @@ def _fill_result(self, result: ExecutionResult, iresult: ExecutionResult, intera
106106 inter_sig = iresult .ExitSignal
107107
108108 if interactor_output [0 ] != '' :
109- try :
110- ok , points , comment = self ._parse_checker_output (interactor_output )
111- except CheckerException as e :
112- result .Status = Status .RE
113- result .Error = str (e )
114- result .Fail = True
115- return
116- result .Points = float (points )
117- result .Comment = comment
118- if ok :
119- result .Status = Status .OK
120- else :
109+ if sol_sig == signal .SIGPIPE :
121110 result .Status = Status .WA
122- result .Error = None
111+ if interactor_output [1 ]:
112+ result .Comment = interactor_output [1 ]
113+ result .Points = 0
114+ else :
115+ try :
116+ ok , points , comment = self ._parse_checker_output (interactor_output )
117+ except CheckerException as e :
118+ result .Status = Status .RE
119+ result .Error = str (e )
120+ result .Fail = True
121+ return
122+ result .Points = float (points )
123+ result .Comment = comment
124+ if ok :
125+ result .Status = Status .OK
126+ else :
127+ result .Status = Status .WA
128+ result .Error = None
123129 elif iresult .Status != Status .OK and iresult .Status != Status .TL and inter_sig != signal .SIGPIPE :
124130 result .Status = Status .RE
125131 result .Error = (f"Interactor got { iresult .Status } . This would cause SE on sio. "
@@ -218,6 +224,8 @@ def run(self, time_limit, hard_time_limit, memory_limit, input_file_path, output
218224 result .Error = f"Solution { i } got an exception:\n " + str (proc .exception )
219225
220226 for proc in processes :
227+ if proc .exception :
228+ continue
221229 if proc .result .Status != Status .OK :
222230 result = proc .result
223231 break
0 commit comments