编程语言
首页 > 编程语言> > 删除文件时在python中检测损坏的流

删除文件时在python中检测损坏的流

作者:互联网

我的问题是当日志被旋转时,日志记录停止为python程序.
我已将其跟踪到流本身.我没有看到任何方法来判断流是否从python中断.删除文件后,它仍然接受写入而没有任何问题.

import os

FILE = 'testing.txt'

fs = open(FILE, 'a')
fs.write('word')
os.remove(FILE)
fs.write('Nothing....') # Nothing breaks
print(fs.errors) # No errors

那么,我怎样才能知道文件流是否仍然有效?
并且检查文件是否存在将无济于事,因为无论流是否仍然有效,文件将始终存在.

解决方法:

经过更多的检查,我找到了解决方案.这是操作系统特定的问题.在Linux(或Macintosh)中删除文件时,它只是取消链接. (我不知道这个)
因此,如果您在计算机上运行lsof,它仍会将文件显示为打开.

[user@machine]$lsof | grep --color -i "testing.txt"
python26  26495    user    8w      REG               8,33     23474     671920 /home/user/temp/testing.txt (deleted)

解决方案是在python中统计流.

stat = os.fstat(fs.fileno())

这将为您提供它拥有的链接数量.

if stat.st_nlink < 1:
    #has been deleted

你去吧现在您知道是否应该重新加载它.希望这有助于其他人.

标签:python,stream,linux,delete-file,logrotate
来源: https://codeday.me/bug/20190704/1381122.html