Задача: реализовать проверку программ, которые умеют считывать аргументы командной строки. Например, запуск которых происходит так:
python3 program.py 1 2
Для этого необходимо кастомизировать шаблон проверки.
Сам код шаблона:
import subprocess
student_answer = """{{ STUDENT_ANSWER | e('py') }}"""
filename = '__tester__.py'
with open(filename, "w") as src:
print(student_answer, file=src)
args = "{{ TEST.stdin }}".split()
exec_command = ["python3", "./__tester__.py", *args]
# Now run the code. Since this is a per-test template,
# stdin is already set up for the stdin text specified in the test case,
# so we can run the compiled program directly.
try:
output = subprocess.check_output(exec_command, universal_newlines=True)
print(output)
except subprocess.CalledProcessError as e:
if e.returncode > 0:
# Ignore non-zero positive return codes
if e.output:
print(e.output)
else:
# But negative return codes are signals - abort
if e.output:
print(e.output, file=sys.stderr)
if e.returncode < 0:
print("Task failed with signal", -e.returncode, file=sys.stderr)
print("** Further testing aborted **", file=sys.stderr)
Оформляется все как обычный тест, но числа из input пойдут не на вход, а как аргументы при запуске.