感觉上一个评测脚本太没挑战性了,重写了一个,用到了类、异常、子进程管理、通配符、正则表达式、INI文件…… 一大堆东西。

目前主要功能基本写完了,先show:

这是我测试用的评测配置文件:

[problem]
Name = 测试题目 for test
Info = 测试题目测试测试测试!Hello World

[source]
Custom = [.py: python2 %S] [.cx: cp %S %E.cpp, g++ %E.cpp -O3 -o %E.exe, %E.exe] [.rb: ruby %S] 
FileName = pet.cpp $$ pet.pas $$ pet.c $$ pet.py $$ pet.cx
Dir = ./src/pet

[data]
InFile = [./data/pet/*.in1, ./data/pet/*.in2]
OutFile = [./data/pet/*.ans]

[execute]
TimeLimit = 1
MemoryLimitInKB = 800
Input = $$STD$$, pet.in
Output = $$STD$$

[report]
CompareMethod = 
CompareFunction = IgnoreEmptyLine
; CountFunction = 
ReportFormat = TXT
ReportFile = pet_report.txt

看起来还是很高级的吧。report中的一些功能还没搞定,不过应该不难了。

评测后的输出结果:

[Ploblem Info]
Name:  测试题目 for test
Info:  测试题目测试测试测试!Hello World
Time limit: 1.00 s
Time limit: 800 KB

[Player Info]
    Player name:  cuihao
    Source path:  /home/cuihao/pytest/src/pet/cuihao/pet.c
    TEST #0: A  (time: 0.01 sec    mem: 380 KB) 
    TEST #1: Timeout 
    TEST #2: Timeout 
    TEST #3: W  (time: 0.01 sec    mem: 376 KB) 
Score: 25

[Player Info]
    Player name:  blank
    Source path:  /home/cuihao/pytest/src/pet/blank/pet.py
    TEST #0: Memory exceeds 
    TEST #1: Timeout 
    TEST #2: Memory exceeds 
    TEST #3: Memory exceeds 
Score: 0

[Player Info]
    Player name:  testrt
    Source path:  /home/cuihao/pytest/src/pet/testrt/pet.cx
    TEST #0: W  (time: 0.01 sec    mem: 160 KB) 
    TEST #1: A  (time: 0.00 sec    mem: 0 KB) 
    TEST #2: A  (time: 0.01 sec    mem: 88 KB) 
    TEST #3: stdin IOError 
Score: 50

为了能往Windows移植,我尽量都用平台无关的python代码。不过有些实在无法解决的,比如内存用量统计问题,还是用了只能在Linux使用的代码。

不久应该就可以搞定了。