python - 使用 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 脚本相同)
解决方案
您面临的是 Unix 问题,而不是 Python 问题。在某些情况下,操作系统决定将您拒之门外。但自发病例很少见。它还取决于正在写入文件的程序。如果您愿意,您也可以从您的程序中请求锁定。但是,当文件被另一个进程释放时,您的缓冲区应该被写入。结果会是什么,好吧,你应该试试看..
您应该能够通过使用 fcntl 模块更改文件描述符上的标志来覆盖默认行为。
甚至使用 os 模块中的低级 IO 函数而不是 Python 的文件对象就足够了。您可以先尝试 os.open()、os.write() 和 os.close(),如果第一个解决方案不起作用,则稍后再读取和更改标志。
您还可以尝试使用 Python 缓冲,更改 open() 函数的 buffer 参数并通过以无缓冲模式启动 Python 将其完全关闭。
python -u
推荐阅读
- python - 从数据框python中的某个位置删除具有缺失值的行
- nginx - Nginx 相当于来自 HAproxy 的“cookie 前缀”
- gcc - GNU as 在从 makefile 调用时不接受标志,但在手动输入时可以
- reactjs - 从反应应用程序执行突变的问题
- javascript - 如何在网站底部放置3个按钮?
- android - 通过 OAuth 发布版本的 Google Drive 收到 dailyLimitExceededUnreg
- python - 计数小于和结束条件的值
- amazon-web-services - AWS:找不到 iam 的实例元数据
- javascript - 如何使用 javascript 和 mvc 将画布上传到项目的文件夹
- sql - 汇总 SQL Server 中 1 列中每个值的值计数