我正在为Temple大学的班级编写黑客等级风格,离线应用程序。我有一个task.py,这是用户应该编写自己的代码的地方。我有一个test.py,我在其中创建了一个模块来测试用户的代码。
我正在使用Thonny,因为它需要非常低的资源,假设学生在家里没有互联网,代码正在写入。
以下是task.py
的示例Specification
这是我的测试文件test.py
import sys
def variables():
f = open('test.txt', 'w')
#Start your code below (tip: Make sure to indent your code)
penguin = "Penguin"
six = "6"
false = "False"
none = "None"
a = "100.66"
f.write(penguin+"\n")
f.write(six+"\n")
f.write(false+"\n")
f.write(none+"\n")
f.write(a+"\n")
print(penguin)
print(6)
print(false)
print(none)
print(a)
f.close()
我需要将test.py文件锁定,以便学生无法修改,但我需要它才能被调用。有什么想法吗?
答案 0 :(得分:1)
有一个名为portalocker(https://pypi.python.org/pypi/portalocker)的跨平台文件锁定模块,但如果您不想使用它,则可以检查其他内容。使用os函数
.section {
overflow: hidden;
transition: transform 0.3s ease-out;
height: auto;
transform: scaleY(1);
transform-origin: top;
&.hidden {
transform: scaleY(0);
}
}
会在最后一次修改文件时给你,如果最后一次修改了文件,那么当有人编辑文件时,它会被修改。这只是portalocker的替代方案......只需在某处保留og文件的副本,如果修改时间不同,只需让python将副本写入修改后的文件即可。我强烈建议您只使用此模块,因为您可以使用更多很酷的功能。如果您有任何其他问题,请对其进行评论。
答案 1 :(得分:0)
它与Python无关。而且我认为你无法实现它。即使您锁定test.py中的更改(以某种方式),您也必须将其设置为可读(因此它将能够运行)。但是如果你这样做,学生可以按Ctrl + C和Ctrl + V代码test.py,保存到新文件并修改。
Python是解释语言,因此您无法完全编译它(如在C中)。您可以将其编译为字节码(.pyc文件),但它们可以被反编译,因此它不是解决方案。
顺便说一下。如果它处于脱机状态并且不在任何地方保存或发送结果,那么使该文件不可更改是没有意义的。
编辑:如果你只想阻止task.py修改test.py,你可以制作bash(或cmd - 无论如何)脚本:首先运行task.py然后运行test.py(但作为单独的python进程)
答案 2 :(得分:0)
问题是,即使您将测试文件锁定,即使您将.txt文档锁定,也仍然可以操作结果。
电子。 G。在我的变量提交中,我可以做这样的事情:
import filecmp
filecmp.cmp = lambda x, y: True
在变量函数中的任何位置添加它,您的测试文件将始终通过。 您可能希望在执行时完全隔离学生代码。也许您可以使用CodeJail之类的东西来创建沙箱来执行学生代码,然后单独比较结果。