我有一个输出 pid 的脚本。我将权限更改为 777。每个后续实例都将使用新的 pid 覆盖该文件。尽管有 777 权限,python 仍会报告操作系统错误,除非执行脚本的用户是文件的所有者,否则不允许执行该操作。 (当然,我可以从 shell 中删除/覆盖文件)。
#!/usr/bin/python
import os
import time
f = open("/tmp/test.txt", 'w')
f.write("Hello, file!\n")
os.chmod("/tmp/test.txt", 0777)
f.close()
$ /tmp/myscript.py # fine
$ sudo -u other_user /tmp/myscript.py #not fine -- gives error
最佳答案
在 Linux 中,只有创建文件的用户或根用户才能更改其权限。如果调用 open
时文件不存在,则您是新文件的所有者,可以更改其权限。当文件已经存在时,它只是被截断并且现有权限仍然有效。只捕获并忽略错误是合理的,因为它只会在权限设置正确后发生。
如果您在父目录中有适当的权限,您可以删除该文件并每次创建一个新文件。但这对/tmp 不起作用,因为设置了粘性位并且只有所有者才能删除该文件。
关于Python 不会覆盖 777 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29680604/