【问题标题】:Python won't write to file unless it already exists: permissions related issue [duplicate]除非文件已经存在,否则 Python 不会写入文件:权限相关问题 [重复]
【发布时间】:2014-11-02 21:41:19
【问题描述】:

我有以下 Python 代码:

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 方法时会收到一条错误消息:

[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 的权限,但如果文件存在,它会很高兴地写入文件。这是为什么呢?

【问题讨论】:

    标签: python


    【解决方案1】:

    创建新文件涉及将新文件条目写入目录,这需要目录的写入权限。修改现有文件会绕过这一点。

    【讨论】:

    • 假设他正在使用 sudo 运行文件,它不会有那些必要的写权限吗?
    • 这意味着O_CREAT 没有在open(2) 调用中设置,这听起来像是一个操作系统错误。
    • 谢谢,原来@iChar 得到了上面的正确答案,我需要使用open(self.data_file, 'w+')
    • @marflar:但这并不能完全解释为什么。 (我的也不是。)
    【解决方案2】:

    改变

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 2016-10-04
      • 2011-12-14
      • 1970-01-01
      • 2020-04-24
      • 2012-03-13
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      相关资源
      最近更新 更多