首页 > 解决方案 > 使用 python 脚本将数据写入 unix 中的文件的问题

问题描述

当我在 Unix 中使用 Python 将数据写入目标文件时,我的代码运行良好。

但是,如果我在 Unix 中使用 vi 模式打开目标文件,同时代码正在向其中写入数据,那么它会跳过将数据写入目标文件(没有遇到任何错误或代码失败)直到时间目标文件正在打开。

下面是我的代码的一个简单示例:

import csv


with open('filename.txt', 'ab') as writeFile:
    writer = csv.writer(writeFile, quoting=csv.QUOTE_ALL)
    writer.writerow([some data])


请让我知道是否有任何方法可以继续将数据写入文件,即使它正在被其他进程使用(与 Unix shell 脚本相同)

标签: python

解决方案


您面临的是 Unix 问题,而不是 Python 问题。在某些情况下,操作系统决定将您拒之门外。但自发病例很少见。它还取决于正在写入文件的程序。如果您愿意,您也可以从您的程序中请求锁定。但是,当文件被另一个进程释放时,您的缓冲区应该被写入。结果会是什么,好吧,你应该试试看..

您应该能够通过使用 fcntl 模块更改文件描述符上的标志来覆盖默认行为。

甚至使用 os 模块中的低级 IO 函数而不是 Python 的文件对象就足够了。您可以先尝试 os.open()、os.write() 和 os.close(),如果第一个解决方案不起作用,则稍后再读取和更改标志。

您还可以尝试使用 Python 缓冲,更改 open() 函数的 buffer 参数并通过以无缓冲模式启动 Python 将其完全关闭。

python -u

推荐阅读