Python保持文件不被修改

时间:2018-02-23 14:27:19

标签: python

我正在为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文件锁定,以便学生无法修改,但我需要它才能被调用。有什么想法吗?

3 个答案:

答案 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之类的东西来创建沙箱来执行学生代码,然后单独比较结果。