我试图打开另一个进程打开的日志文件并删除前几行。
在Unix上,我只需做一个os.open('/tmp/file.log', os.O_NONBLOCK),这样就可以更接近我的目标。在
现在我被Windows困住了,我需要以某种方式旋转这个日志,而不结束保存文件的应用程序。这有可能吗?在
起初,我考虑在应用程序希望日志所在的位置打开一个文件句柄,并在Python中充当文件句柄的管道,但在Windows上我也找不到任何方法。在
我还考虑过定期移动文件并让应用程序重新创建该文件,但由于该文件被另一个进程使用,所以效果不太好。在
也想到了O_SHLOCK,但话说回来,那是Unix,而不是Windows。
所以我选择了mmap文件,希望它能让它更灵活一些,但这让我一无所获。在import mmap
import contextlib
import time
with open(r'test.log', 'r+') as f:
with contextlib.closing(mmap.mmap(f.fileno(), 0)) as m:
while 1:
line = m.readline()
if len(line) > 0:
print line
time.sleep(0.5)
这会导致应用程序无法访问该文件,因为Python正在保存该文件(反之亦然)。在
想到了signal.SIGHUP,但这在Windows中也不存在,所以回到原点。在
我被困住了,我已经试过了,Python能帮我吗?还是需要切换我的语言?在