3

tempfile.mkstemp用来生成一个随机可用的文件名并用os.fdopen. 然后我通过将文件名传递给任务celery

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

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

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

我在 Ubuntu 14.04 上运行 Python 3.6。

4

2 回答 2

4

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

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

于 2018-06-27T13:17:45.667 回答
3

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

tempfile.TemporaryFile使用ortempfile.NamedTemporaryFile代替创建您的临时文件。

于 2018-06-27T13:08:12.857 回答