tempfile.mkstemp 权限设置

tempfile.mkstemp permissions settings

我正在使用 tempfile.mkstemp 生成随机可用文件名并使用 os.fdopen 写入一些内容。然后我通过 celery 将文件名传递给任务。

此任务打开文件,处理内容,最后删除文件。 在测试中这工作正常,但是我意识到这会在我的实时环境中中断,在该环境中,用户 运行 执行任务与创建文件的用户不同。

这意味着用户无法打开该文件,因为 tempfile.mkstemp 将权限设置为 600(-rw-------)。

我不能让同一个用户同时进行两个进程运行,那么有什么方法可以修改tempfile.mkstemp设置的文件权限吗?

我 运行宁 Python 3.6 Ubuntu 14.04.

不,除了使用chmod命令手动修改权限外,没有办法修改tempfile.mkstemp创建的文件的权限。此功能旨在以最安全的方式创建临时文件,因此该文件只能由创建用户 ID 读写。参见 mkstemp documentation

改为使用 tempfile.TemporaryFile or tempfile.NamedTemporaryFile 创建临时文件。

鉴于您在调用 mkstemp() 后使用 os.fdopen,您最好使用 tempfile.NamedTemporaryFile(delete=False)。它 returns 一个 Python 文件对象而不是 fd.

无论哪种方式,返回的文件都会有 mode=0600,因此您需要更改它。使用 os.fchmod(temp_file.fileno(), 0640) 或类似的(根据需要更改模式)。