防止打开文件

时间:2010-12-13 10:36:12

标签: python logging file-locking

我正在编写一个Python记录器脚本,它以下列方式写入CSV文件:

  1. 打开文件
  2. 附加数据
  3. 关闭文件(我认为这是保存更改所必需的,在每个日志记录例程后都是安全的。)
  4. 问题
    通过Windows资源管理器可以访问该文件(我正在使用XP)。如果在Excel中打开文件,Excel将锁定对它的访问。当脚本试图附加数据时,显然它会失败,然后它会完全中止。

    目的:
    有没有办法使用Python锁定文件,以便对脚本的任何访问都是独占的?或者我的方法论可能首先是穷人?

2 个答案:

答案 0 :(得分:4)

不是在每次访问后关闭并重新打开文件,只需刷新其缓冲区:

theloggingfile.flush()

通过这种方式,您可以将其保持打开以便在Python中编写,这应该将文件锁定在打开它以供写入的其他程序中。我认为 Excel可以在Python中打开时以只读方式打开它,但如果不重新启动进入Windows,我就无法检查它。

编辑:我认为您不需要以下步骤。 .flush()应将其发送到操作系统,如果您尝试在另一个程序中查看它,操作系统应该为其提供缓存版本。使用os.fsync强制操作系统将其真正写入硬盘驱动器,例如如果你担心突然的电力故障。

os.fsync(theloggingfile.fileno())

答案 1 :(得分:0)

据我所知,Windows不支持文件锁定。换句话说,无法阻止不知道您的文件被锁定的应用程序读取文件。

但剩下的问题是:Excel如何实现这一目标?

您可能想先尝试写一个临时文件(Excel不知道的文件),然后用它替换原始文件。