@@ -106,20 +106,26 @@ def _fill_result(self, result: ExecutionResult, iresult: ExecutionResult, intera
106
106
inter_sig = iresult .ExitSignal
107
107
108
108
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 :
121
110
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
123
129
elif iresult .Status != Status .OK and iresult .Status != Status .TL and inter_sig != signal .SIGPIPE :
124
130
result .Status = Status .RE
125
131
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
218
224
result .Error = f"Solution { i } got an exception:\n " + str (proc .exception )
219
225
220
226
for proc in processes :
227
+ if proc .exception :
228
+ continue
221
229
if proc .result .Status != Status .OK :
222
230
result = proc .result
223
231
break
0 commit comments