# ACM-judge-module
**Repository Path**: nler/acm-judge-module
## Basic Information
- **Project Name**: ACM-judge-module
- **Description**: 一个对lorun模块再次封装的ACM判题模块
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-02-10
- **Last Updated**: 2023-02-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
judge判题模块
===================
> 因为lorun模块调用了Linux Api 所以只能运行在Linux系统中
## 1、安装lorun模块
在项目文件夹下运行
```python
python setup.py install
```
然后就可以在python文件中引用[lorun模块](doc/lorun.md)了
## 2、judge模块
### 2.1、介绍
> 这个模块用python封装了lorun,可以直接用python运行
**快速使用**
我们可以直接运行`judge.py 源码文件`来对源码进行测试,其中,我们规定输入输出测试需要放在源码文件的同级目录下的test目录中,命名方式为输入0.in,输出0.out。并且需要建立`language`文件夹,在其中编写运行命令模板。
我们可以在.bashrc中定义shell变量方面调用judge.by,
```sh
export judge = "/usr/share/acm-judge-module/judge/judge.py"
```
然后我们就可以在任何地方使用`$judge [源码文件]`来使用judge
**自定义使用**
我们可以把需要测试的文件放在judge的文件夹下,然后用python运行judge.py
所需参数如下
|参数|值|作用|
|--|--|--|
| --language | cpp
java
python3
... | 标明源码的语言,可以[自定义](#22配置编译运行命令)|
| --languageConfig | \ | 编程语言所在的文件夹|
| --type| json
str | 默认值为*str*,输出的结果类型,选择*str*时输出的适合直接阅读,选择*json*输出的是一行json串 |
| --mode | entire
portion | 默认值为*entire*,判题模式, 选*entire*时会将testdata内的所有测试样例都测一遍,选择*portion*时会在第一个未通过的测试用例停下|
| --file | \ |用于测试的源码文件|
| --fileSuffix | \ |源代码文件后缀名|
| --filePrefix | \ |源代码文件前缀名|
| --filePath | \ |源代码文件所在路径|
| --testDir | \ | 存放测试用例的文件夹,测试用例命名规则为从0开始0.in表示输入0.out表示输出|
| --codeResultDir | \ | 代码结果生成路径 |
| --time | \ | 运行时间限制,单位ms |
| --memory | \ | 运行内存限制,单位KB |
| --deleteFile | true
false | 默认值为*False*,是否删除源码文件,选择*True*将会在测试结束后删除源码文件
用例:
```cmd
python judge.py --language java --file Main.java --time 300 --memory 2000000 --testdir testdata/ --mode portion --type str --delete False
```
### 2.2、配置编译运行命令
> 在配置编译运行命令时,文件名为Main,脚本会在测试过程中替换为--file参数给的文件名
我们可以在lanuage文件夹下新建一个文件,文件名为\*Directive.json,\*为可以自定义的名称,显然这个一个json文件,需满足json语法,属性如下
|参数|值|说明|
|--|--|--|
|language|\<语言名称\>|语言标识,是--language 的参数,不可与已有的参数冲突|
|compiler|\<编译命令\>|编译源码文件的命令,其中文件名称必须问Main|
|compilerName|\<编译后的文件名\>|执行代码的命令,文件名必须为Main|
|runner|\<运行命令\>|执行代码的命令,文件名必须为Main|
用例:
```json
{
"language": "cpp",
"compiler": "g++ Main.cpp -o Main",
"runner": "./Main",
"compilerName": "Main"
}
```