|
import os |
|
import subprocess |
|
import tempfile |
|
from pathlib import Path |
|
from src.generic_eval import main |
|
|
|
LANG_NAME = "Rust" |
|
LANG_EXT = ".rs" |
|
|
|
def eval_script(path: Path): |
|
basename = ".".join(str(path).split(".")[:-1]) |
|
try: |
|
build = subprocess.run(["rustc", path, "-o", basename], capture_output=True, timeout=15) |
|
except subprocess.TimeoutExpired as exc: |
|
return { |
|
"status": "Timeout", |
|
"exit_code": -1, |
|
"stdout": "Compiler timeout", |
|
"stderr": "Compiler timeout", |
|
} |
|
status = None |
|
returncode = -1 |
|
output = None |
|
if build.returncode != 0: |
|
|
|
|
|
status = "SyntaxError" |
|
returncode = build.returncode |
|
output = build |
|
else: |
|
try: |
|
|
|
output = subprocess.run([basename], capture_output=True, timeout=5) |
|
returncode = output.returncode |
|
if output.returncode == 0: |
|
status = "OK" |
|
else: |
|
|
|
status = "Exception" |
|
except subprocess.TimeoutExpired as exc: |
|
status = "Timeout" |
|
output = exc |
|
os.remove(basename) |
|
return { |
|
"status": status, |
|
"exit_code": returncode, |
|
"stdout": "" if output.stdout is None else output.stdout.decode("utf-8"), |
|
"stderr": "" if output.stderr is None else output.stderr.decode("utf-8"), |
|
} |
|
|
|
if __name__ == "__main__": |
|
main(eval_script, LANG_NAME, LANG_EXT) |
|
|
|
|