Open Jelleas opened 4 years ago
Ik heb geprobeerd je suggestie te implementeren, echter resulteert output = check.stdout()
bij deze opdracht altijd in een check50.Failure
en geen output. Dit komt omdat stdout()
blijkbaar probeert alle output totdat het programma afsluit te verzamelen. Adventure sluit niet af in ruimte 3, en dus timed stdout()
altijd uit. Als dit gebeurt verzamelt hij helaas ook geen enkele output in de variabele (anders had het nog wel mogelijk geweest de exception zelf af te vangen en de output gewoon te gebruiken).
Is dit iets wat mogelijk in check50 zelf aangepast moet worden? Het lijkt me wel ontzettend handig om ook alle output op te kunnen vangen van een niet-afsluitend programma. Anders moeten we wellicht aangeven dat de volgorde niet mag veranderen t.o.v. de dataset.
Nog even extra ter illustratie. Met onderstaande check code:
import check50
@check50.check()
def test():
output = ''
try:
output = check50.run("python test.py").stdout()
except check50.Failure:
pass
check50.log(output)
En onderstaande test.py
:
while True:
print('Hello, world!')
Krijg ik onderstaande output:
Ik zou verwachten 3 seconden aan 'Hello, world!' in de output
te hebben, maar helaas, hij blijft leeg.
"Is dit iets wat mogelijk in check50 zelf aangepast moet worden? Het lijkt me wel ontzettend handig om ook alle output op te kunnen vangen van een niet-afsluitend programma. Anders moeten we wellicht aangeven dat de volgorde niet mag veranderen t.o.v. de dataset." Yup! Maak hiervoor even een Engelstalige issue aan bij cs50: https://github.com/cs50/check50 (of evt. een pr als je een ideetje hebt :)
Wat we wel kunnen doen is het spel stoppen d.m.v. .stdin("quit")
, dan kunnen we wel alle output opvangen.
Ik heb het nog even geprobeerd met .stdin("quit")
, maar dit resulteert ook in geen output, of ik dit nu vóór of na de .stdout()
aanroep. Komende week zal ik even kijken of ik er zelf iets van kan maken in check50, anders maak ik een issue aan.
Een uitwerking had
Waardoor de volgorde van uitprinten kan verschillen, en dat deed het ook tussen check50, de IDE, en onze grading server.
We kunnen daardoor bij https://github.com/minprog/cs50x/blob/031ea998e34049ee3e5caf3828fa9f3fc2dee622/adventure/more/__init__.py#L32-L35 niet vertrouwen op de volgorde van printen. Waarschijnlijk is
output = check.stdout()
en vervolgens handmatig checken een beter idee.