Python不会覆盖777文件

时间:2015-04-16 16:21:29

标签: python file-io

我有一个输出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

2 个答案:

答案 0 :(得分:2)

$ /tmp/myscript.py会创建您拥有的文件。

$ sudo -u other_user /tmp/myscript.py表示other_user将更改您拥有的文件权限。

与以下情况相同:

account1$ touch /tmp/test.txt
account1$ chmod 777 /tmp/test.txt
su account2
account2$ chmod 777  /tmp/test.txt 
#chmod: changing permissions of `test.txt': Operation not permitted

答案 1 :(得分:2)

在Linux中,只有创建文件或root用户的用户才能更改其权限。如果在调用open时该文件不存在,则您是新文件的所有者,并且可以更改其权限。当文件已存在时,它只是被截断,现有权限仍然有效。只捕获并忽略错误是合理的,因为它只在正确设置权限后才会发生。

如果您在父目录中拥有适当的权限,则可以删除该文件并每次创建一个新文件。但这对/ tmp不起作用,因为粘滞位已设置且只有所有者才能删除该文件。