Python 不会覆盖 777 文件

标签 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

最佳答案

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

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

关于Python 不会覆盖 777 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29680604/

相关文章:

java - 使用 BufferedReader 对多维数组中的行进行计数

ruby - 使用 while 循环从 Ruby 中的文件中读取

Python 字典语法,有一个 for 条件

python - 从字典中写一个 CSV,其中键是一行,值是另一行

java - 在 Java 中读取 IDX 文件类型

c++ - 如何在 C++ 中同时写入和读取文件

javascript - 在 JavaScript 中读取文件的最简单方法是什么?

python - PyQt5 玛雅 2017

python - 如何在python中的keras功能api中执行交叉验证

python - 在列表/集合中存储变音符号