Чтение аргументов командной строки в coderunner (moodle plugin) для Python 3

Задача: реализовать проверку программ, которые умеют считывать аргументы командной строки. Например, запуск которых происходит так:

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 пойдут не на вход, а как аргументы при запуске.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.