如何在python中创建具有其他用户可以写入权限的文件

2024-10-04 09:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在python(3)中创建其他用户也可以编写的文件。 到目前为止,我已经了解了这一点,但它改变了

os.chmod("/home/pi/test/relaxbank1.txt", 777)
with open("/home/pi/test/relaxbank1.txt", "w") as fh:
    fh.write(p1)  

我得到了什么

---sr-S--t 1 root root 12 Apr 20 13:21 relaxbank1.txt

预期(在命令行$sudo chmod 777 relaxbank1.txt中执行后) )

-rwxrwxrwx 1 root root 12 Apr 20 13:21 relaxbank1.txt


Tags: 文件用户testtxthomeosaswith
3条回答

这是一种稳健的方法

#!/usr/bin/env python3
import stat
import os
path = 'outfile.txt'
with open(path, 'w') as fh:
    fh.write('blabla\n')
st = os.stat(path)
os.chmod(path, st.st_mode | stat.S_IWOTH)

看看如何:

另见:Write file with specific permissions in Python

如果您不想使用os.chmod并希望使用适当的权限创建文件,则可以使用^{}创建适当的文件描述符,然后使用open创建描述符:

import os
# The default umask is 0o22 which turns off write permission of group and others
os.umask(0)
with open(os.open('filepath', os.O_CREAT | os.O_WRONLY, 0o777), 'w') as fh:
  fh.write(...)

Python 2注意:

Python2.x中的内置open()不支持按文件描述符打开。改用^{};否则,您将得到:

TypeError: coercing to Unicode: need string or buffer, int found.

问题是对open()的调用会重新创建调用。关闭文件后,需要将chmod()移动到,或者将文件模式更改为w+

备选案文1:

with open("/home/pi/test/relaxbank1.txt", "w+") as fh:
    fh.write(p1)
os.chmod("/home/pi/test/relaxbank1.txt", 0o777)

备选案文2:

os.chmod("/home/pi/test/relaxbank1.txt", 0o777)
with open("/home/pi/test/relaxbank1.txt", "w+") as fh:
    fh.write(p1)

注释:Option1稍微好一点,因为它处理文件可能不存在的情况(在这种情况下,os.chmod()将抛出异常)

相关问题 更多 >