# 多處理機平行程式助教 指南 ###### tags: `成大多處理機平行程式設計` [ToC] ## judge homework 1. download student submission into server ``` # github classroom download command gh classroom clone student-repos -a 670856 ``` 2. copy homework files into server ``` # example: scp [OPTIONS] /path/to/local/file username@remote_ip:/path/to/remote/destination scp -r /home/pesudocode/Desktop/多處理/hw1-1 sivslab@140.116.154.66:/home/sivslab/HW_2024/hw1-1 ``` 3. write python script ```python= import os import shutil import subprocess import csv # Configuration: Adjust these paths accordingly SUBMISSION_FOLDER = "./hw1-1-submissions" HOMEWORK_FOLDER = "./hw1-1" CSV_FILE = "hw1-1-results.csv" def get_student_list(submission_folder): """Get list of student submission folder names.""" return [f for f in os.listdir(submission_folder) if os.path.isdir(os.path.join(submission_folder, f))] def copy_homework_to_submissions(homework_folder, submission_folder, students): """Copy homework content (folders and files) to each student's submission folder.""" for student in students: dest_folder = os.path.join(submission_folder, student) try: # Iterate over all items (files and folders) in the homework folder for item in os.listdir(homework_folder): src_path = os.path.join(homework_folder, item) dest_path = os.path.join(dest_folder, item) # Copy directory recursively or individual files if os.path.isdir(src_path): if os.path.exists(dest_path): shutil.rmtree(dest_path) # Remove existing folder if any shutil.copytree(src_path, dest_path) else: shutil.copy(src_path, dest_path) print(f"Copied homework files to {student}'s folder.") except Exception as e: print(f"Failed to copy files for {student}: {e}") def run_command_in_folder(command, folder): """Run a shell command in the specified folder and return success and output.""" try: result = subprocess.run(command, cwd=folder, shell=True, capture_output=True, text=True) success = (result.returncode == 0) output = result.stdout + result.stderr except Exception as e: success = False output = str(e) return success, output def main(): # Get the list of students (submission folder names) students = get_student_list(SUBMISSION_FOLDER) # Prepare the CSV file with open(CSV_FILE, mode='w', newline='') as file: writer = csv.writer(file) writer.writerow(["Student", "Make Success", "Judge Output"]) # Copy homework files to each student's submission folder copy_homework_to_submissions(HOMEWORK_FOLDER, SUBMISSION_FOLDER, students) # Process each student's submission folder for student in students: student_folder = os.path.join(SUBMISSION_FOLDER, student) # Run `make clean && make` make_success, _ = run_command_in_folder("make clean && make", student_folder) # Run `judge` and capture the output _, judge_output = run_command_in_folder("judge", student_folder) # Write the results to the CSV writer.writerow([student, "Success" if make_success else "Fail", judge_output]) print(f"Processed {student}: Make {'Success' if make_success else 'Fail'}") if __name__ == "__main__": main() ``` ``` # copy python script into server scp /home/pesudocode/Desktop/多處理/hw1-1/hw1_1_judge.py sivslab@140.116.154.66:/home/sivslab/HW_2024/hw1-1 ``` 4. 執行judge ``` python3 hw1-1_judge.py ``` 4. get result csv ``` scp sivslab@140.116.154.66:/home/sivslab/HW_2024/hw1-1/hw1-1-results.csv /home/pesudocode/Desktop/多處理/hw1-1 ```