You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3创建文件时如何指定所有者与用户组?

直接创建指定所有者和用户组的文件是否可行?

在Linux环境下,直接以root身份运行Python代码时,无法通过open()函数直接创建所有者为moon、用户组为san的文件——因为open()本身不支持指定文件的所有者和组属性,创建文件时默认会继承当前进程的所有者和组(此处为root:root)。

要实现目标,有两种可行方案:

方案1:先创建文件,再修改所有者和组

这是最直接的常规方式,创建文件后通过Python内置方法或系统命令修改属性:

使用Python内置os.chown()

import os
import pwd

with open('/home/moon/test.txt', 'w') as f:
    print(some_list, file=f)

# 查询moon用户的UID和san组的GID
moon_uid = pwd.getpwnam('moon').pw_uid
san_gid = pwd.getpwnam('san').pw_gid
# 修改文件所有者和组
os.chown('/home/moon/test.txt', moon_uid, san_gid)

使用subprocess调用系统chown命令

import subprocess

with open('/home/moon/test.txt', 'w') as f:
    print(some_list, file=f)

# 执行系统命令修改属性
subprocess.run(['chown', 'moon:san', '/home/moon/test.txt'], check=True)

方案2:切换用户身份创建文件

若要直接以目标用户身份创建文件,可借助root权限切换UID/GID后再创建,此时文件会自动继承切换后的用户和组属性:

import os
import pwd

# 获取moon的UID和san的GID
moon_uid = pwd.getpwnam('moon').pw_uid
san_gid = pwd.getpwnam('san').pw_gid

# 先切换组,再切换用户(root权限下才可执行)
os.setgid(san_gid)
os.setuid(moon_uid)

# 此时创建的文件所有者为moon,用户组为san
with open('/home/moon/test.txt', 'w') as f:
    print(some_list, file=f)

注意:切换UID后无法再切回root身份,因此该方式仅适合仅需创建文件的场景,后续代码会以moon用户权限运行。

总结:无法通过open()直接指定文件的所有者和组,要么创建后修改属性,要么切换用户身份创建。

内容的提问来源于stack exchange,提问作者Judy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:01:01