Skip to content

API Run

lanrongqi edited this page Mar 19, 2021 · 2 revisions

不使用CLI,直接执行一次评测

从v2.2.1版本开始,支持直接使用StartJudgement()方法直接执行一次评测。

开始吧

首先,安装deer-executor的最新版本

$ go get github.com/LanceLRQ/deer-executor/v2 

然后调用StartJudgement方法,相当于是调用了deer-executor run功能。示例代码:

package main

import (
    "fmt"
    "github.com/LanceLRQ/deer-executor/v2/common/logger"
    "github.com/LanceLRQ/deer-executor/v2/common/utils"
    "github.com/LanceLRQ/deer-executor/v2/client/run"
)

func main()  {
    runOption := run.JudgementRunOption{
        Clean: true,
        ShowLog: false,
        LogLevel: logger.LogLevelDebug,
        WorkDir: "/www/data/problems/1001",
        ConfigFile:  "/www/data/problems/1001/problem.json",
        Language: "auto",
        LibraryDir: "/www/data/libs",
        CodePath: "/www/data/codes/1.c",
        SessionID: "",
        SessionRoot: "",
      	Persistence: nil,
    }
    _, rel, err := run.StartJudgement(&runOption)
    if err != nil {
        panic(err)
    }
    fmt.Println(utils.ObjectToJSONStringFormatted(rel))
}

定义

func StartJudgement(options *JudgementRunOption) (*executor.JudgeSession, *commonStructs.JudgeResult, error)

由于StartJudgement会自动完成一次评测操作,原则上不要再去操作JudgeSession了。这里返回是方便你在某些情况下去获取一些信息。另外若Clean没有启用,你可以在评测结束后调用session.Clean()清理会话。

JudgementRunOption说明

type JudgementRunOption struct {
    Persistence     *persistence.JudgeResultPersisOptions			// 持久化选项
    Clean           bool				// true则自动清理会话目录
    ConfigFile      string			// 配置文件路径
    WorkDir         string			// 工作目录路径
    ShowLog         bool				// 是否在控制台打印日志(一般关闭即可)
    LogLevel        int					// 打印日志等级(开启控制台打印日志后有效)
    Language        string			// 评测语言(auto为自动按文件后缀检测)
    LibraryDir      string			// Lib文件夹,用于特殊评测下和checker等一起编译。非特殊评测可以留空,否则报错。
    CodePath        string			// 被测代码路径
    SessionID       string			// 会话ID,留空会自动生成一个UUID代替
    SessionRoot     string			// 会话工作目录,留空默认/tmp,可以自定义
}

type DigitalSignPEM struct {
    PublicKey     *rsa.PublicKey
    PrivateKey    *rsa.PrivateKey
    PublicKeyRaw  []byte
    PrivateKeyRaw []byte
}

type JudgeResultPersisOptions struct {
    DigitalSign bool            // 是否启用数字签名
    DigitalPEM  *DigitalSignPEM // PEM 数字证书信息
    OutFile     string          // 持久化最终输出的文件路径
    CompressorType   uint8			// 压缩方式,传1会使用GZIP,其他值默认不压缩
    SessionDir       string			// 评测会话目录
    SaveAcceptedData bool 			// 是否保存已经AC的数据
}