我使用tempfile.mkstemp生成一个随机可用的文件名,并使用os.fdopen编写一些内容。然后通过celery将文件名传递给任务。
此任务打开文件,处理内容,最后删除文件。在测试中,这很好,但是我已经意识到,在我的实际环境中,运行任务的用户与创建文件的用户是不一样的。
这意味着用户无法打开文件,因为tempfile.mkstemp将权限设置为600(-rw-------)。
我不能使两个进程都由同一个用户运行,那么是否有办法修改tempfile.mkstemp设置的文件权限?
我正在Ubuntu14.04上运行Python3.6。
发布于 2018-06-27 13:17:45
考虑到在调用mkstemp()之后使用os.fdopen,使用tempfile.NamedTemporaryFile(delete=False)可能会更好。它返回一个Python文件对象,而不是一个fd。
无论哪种方式,返回的文件都有mode=0600,所以您需要修改它。使用os.fchmod(temp_file.fileno(), 0640)或类似的(根据您的需要更改模式)。
发布于 2018-06-27 13:08:12
否,除了使用chmod命令手动修改权限之外,没有办法修改tempfile.mkstemp创建的文件的权限。此函数通过设计以最安全的方式创建临时文件,因此该文件只能通过创建的用户ID才能读取和写入。请参见mkstemp文档。
https://stackoverflow.com/questions/51063378
复制相似问题