Python防止文件被修改

Python防止文件被修改,python,Python,我正在为坦普尔大学的一门课程编写黑客等级风格的离线应用程序。我有一个task.py,用户应该在这里编写自己的代码。我有一个test.py,其中我创建了一个模块来测试用户的代码 我使用Thonny,因为它需要非常低的资源,假设学生在家里没有互联网,代码就是为他们编写的 下面是task.py的一个示例 import sys def variables(): f = open('test.txt', 'w') #Start your code below (tip: Make sur

我正在为坦普尔大学的一门课程编写黑客等级风格的离线应用程序。我有一个task.py,用户应该在这里编写自己的代码。我有一个test.py,其中我创建了一个模块来测试用户的代码

我使用Thonny,因为它需要非常低的资源,假设学生在家里没有互联网,代码就是为他们编写的

下面是task.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()
from task import variables
import filecmp, os

variables()
a=filecmp.cmp("test.txt","ans.txt")
if a == True:
    print("Test Case Passed")
os.remove("test.txt")`
这是我的测试文件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()
from task import variables
import filecmp, os

variables()
a=filecmp.cmp("test.txt","ans.txt")
if a == True:
    print("Test Case Passed")
os.remove("test.txt")`

我需要test.py文件被锁定,这样学生就不能修改它,但我需要它能够被调用。有什么想法吗?

它与Python无关。我不认为你能做到。即使您(以某种方式)在test.py中锁定了更改,您也必须将其设置为可读(以便它能够运行)。但若您这样做,学生可以使用test.py的Ctrl+C和Ctrl+V代码,保存到新文件并修改

Python是解释语言,所以您不能完全编译它(就像在C中一样)。您可以将其编译为字节码(.pyc文件),但它们可以反编译,因此这不是解决方案

顺便说一句,如果它处于脱机状态,并且没有将结果保存或发送到任何地方,那么使该文件不可更改是毫无意义的


编辑:如果您只是想阻止task.py修改test.py,可以创建bash(或cmd-which)脚本:首先运行task.py,然后运行test.py(但作为单独的python进程)。

有一个跨平台文件锁定模块称为portaloker(),但如果您不想使用它,可以检查其他内容。使用操作系统功能

last_mod = os.path.getmtime('test.txt')

将为您提供上次修改文件的时间,如果上次时间与创建文件时不同,则有人对其进行了编辑。这只是PortalLocker的替代品。。。只需在某处保留og文件的副本,如果修改时间不同,只需让python在修改后的文件上写入副本即可。我强烈建议您只使用这个模块,因为您可以从中使用更多很酷的功能。如果你有任何进一步的问题,就评论他们

问题是,即使您锁定了测试文件,即使您锁定了.txt文档,结果仍然可以被操纵

例如。在提交变量时,我可以这样做:

import filecmp
filecmp.cmp = lambda x, y: True
在variables函数中的任何位置添加此项,测试文件将始终通过。
您可能希望在执行学生代码时将其完全隔离。也许您可以使用类似创建沙盒的方法来执行学生代码,然后分别比较结果。

您在哪个平台上?