除非已经存在,否则python不会写入文件:与权限相关的问题

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()

如果文件/etc/my_module/resources.json不存在,那么调用write方法时会收到一条错误消息:

1
[Errno 2] No such file or directory: '/etc/my_module/resources.json'

如果我手动创建文件并再次调用write方法,那么一切都会正常工作,JSON会被写到文件中。

我使用sudo:sudo python my_module.py运行我的应用程序,并且我已经将我的用户(vagrant)添加到/etc/sudoers中。

因此,如果文件不存在,python就不会创建它,因为它没有写入/etc的权限,但是如果文件确实存在,它会很高兴地写入该文件。为什么会这样?


变化

1
f = open(self.data_file, 'w')

1
f = open(self.data_file, 'w+')

创建新文件涉及将新文件条目写入目录,这需要对目录具有写权限。修改现有文件将绕过此操作。