我正在尝试打开一个由另一个进程保持打开的日志文件并删除前几行。在 Unix 上,我只需做 a 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可以在这里帮助我还是我需要切换我的语言?