Python won't write to file unless it already exists: permissions related issue
本问题已经有最佳答案,请猛点这里访问。
我有以下python代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Server(object): def __init__(self, options): self.data_file = '/etc/my_module/resources.json' # Triggered when new data is received def write(self, data): try: f = open(self.data_file, 'w') json.dump(data, f) except Exception, e: print e finally: f.close() |
如果文件
1 | [Errno 2] No such file or directory: '/etc/my_module/resources.json' |
如果我手动创建文件并再次调用write方法,那么一切都会正常工作,JSON会被写到文件中。
我使用sudo:
因此,如果文件不存在,python就不会创建它,因为它没有写入/etc的权限,但是如果文件确实存在,它会很高兴地写入该文件。为什么会这样?
变化
1 | f = open(self.data_file, 'w') |
到
1 | f = open(self.data_file, 'w+') |
创建新文件涉及将新文件条目写入目录,这需要对目录具有写权限。修改现有文件将绕过此操作。