# 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" } ```