diff options
author | adityacp | 2016-09-02 12:59:20 +0530 |
---|---|---|
committer | adityacp | 2016-09-02 12:59:20 +0530 |
commit | 3c1bbe9d8c53c419d2fa2a254228484ea74aab96 (patch) | |
tree | 505e646133b52fe56fe1006ad48007cf01c61125 /yaksh/bash_stdio_evaluator.py | |
parent | 83fe192987c239287bf816a31f4da31910eb7087 (diff) | |
parent | 01e08dd15b59ce353043d541c9be81592cda3fe0 (diff) | |
download | online_test-3c1bbe9d8c53c419d2fa2a254228484ea74aab96.tar.gz online_test-3c1bbe9d8c53c419d2fa2a254228484ea74aab96.tar.bz2 online_test-3c1bbe9d8c53c419d2fa2a254228484ea74aab96.zip |
refactor in test_models and updated with latest changes
Diffstat (limited to 'yaksh/bash_stdio_evaluator.py')
-rw-r--r-- | yaksh/bash_stdio_evaluator.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/yaksh/bash_stdio_evaluator.py b/yaksh/bash_stdio_evaluator.py new file mode 100644 index 0000000..56f2e35 --- /dev/null +++ b/yaksh/bash_stdio_evaluator.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +import subprocess +import os +from os.path import isfile + +#local imports +from code_evaluator import CodeEvaluator +from stdio_evaluator import Evaluator +from file_utils import copy_files, delete_files + +class BashStdioEvaluator(CodeEvaluator): + """Evaluates Bash StdIO based code""" + + def setup(self): + super(BashStdioEvaluator, self).setup() + self.submit_code_path = self.create_submit_code_file('Test.sh') + + def teardown(self): + super(BashStdioEvaluator, self).teardown() + os.remove(self.submit_code_path) + if self.files: + delete_files(self.files) + + def compile_code(self, user_answer, file_paths, expected_input, expected_output): + self.files = [] + if file_paths: + self.files = copy_files(file_paths) + if not isfile(self.submit_code_path): + msg = "No file at %s or Incorrect path" % self.submit_code_path + return False, msg + user_code_directory = os.getcwd() + '/' + user_answer = user_answer.replace("\r", "") + self.write_to_submit_code_file(self.submit_code_path, user_answer) + + def check_code(self, user_answer, file_paths, expected_input, expected_output): + success = False + expected_input = str(expected_input).replace('\r', '') + proc = subprocess.Popen("bash ./Test.sh", + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + evaluator = Evaluator() + success, err = evaluator.evaluate(user_answer, proc, + expected_input, + expected_output + ) + return success, err |