提问人:Jim B 提问时间:11/24/2020 最后编辑:Jim B 更新时间:11/25/2020 访问量:104
使用 readline() 轮询文件以进行更改,但不适用于 Debian 9
Polling file for changes with readline() works on macOS but not Debian 9
问:
我想“轮询”文件以进行更改。
以下代码在带有 Python 3.8.6 的 macOS 10.15.7 上工作正常,但在带有 Python 3.7.3 的 Debian 9 上不起作用。在 Debian 上,当我向要池化的文件添加新行时,它无法被识别并继续进行打印检查。
from time import sleep
from datetime import datetime
wait = 1
with open('file.log') as fp:
exit_pooling = False
while not exit_pooling:
print("*** check " + str(datetime.now()))
line = fp.readline()
if not line:
sleep(wait)
continue
else:
print('process line')
谢谢!
答:
0赞
Waket Zheng
11/24/2020
#1
在 Ubuntu18.04 和 Python3.6 上按预期工作:
#!/usr/bin/env python3
from time import sleep
from datetime import datetime
from pathlib import Path
wait = 1
with Path('file.log').open() as fp:
exit_pooling = False
while not exit_pooling:
print("*** check " + str(datetime.now()))
line = fp.readline()
if not line:
sleep(wait)
else:
print(f'process line: {line}')
exit_pooling = line.strip() == 'exit'
评论
0赞
Jim B
11/25/2020
谢谢。由于我现在被困在服务器上的 Python 3.7 上,因此我需要一个不使用 walrus 运算符的版本。我的主要问题是为什么 readline() 行为从 macOS 到 Debian 不同。当我向文件添加新行进行测试时,Debian 上的轮询机制无法识别更改
0赞
Jim B
11/25/2020
我刚刚尝试了您编辑的答案。它确实打印了file.log的内容。但是,当我保持脚本运行时,它会打印一个“检查......”每秒,打开file.log并添加一行新行,脚本只是继续打印“检查”,而不是打印出添加的新行。这种预期行为适用于我的本地计算机 (macOS),但不适用于 Debian 9
评论
exit_pooling