我正在尝试让 python 跟踪日志文件,例如 syslog。
我尝试以读取模式打开文件,但它从未意识到另一个进程是否写入该文件。使用 popen 和实际的“tail -f”以及注册要选择的 popened 进程,python 能够读取任何写入。使用 python systemd 模块,我可以让 systemd 响应内容,但我想知道是否有其他方法代替这些方法,以及为什么打开文件进行读取并不断尝试读取 1024 字节,不起作用。
答案1
它必须在不重新打开 syslog 等日志文件的情况下工作。 Tail 在不需要(并且没有要求)时也不会重新打开文件。只是您需要轮询常规文件,等待数据只能在管道和套接字等中进行。
最好发布您试图告诉您错误所在以及如何修复的非工作代码示例。此外,您想要实现的目标也不是很容易理解。如果您想要选择或阻止读取直到数据可用,这对于常规文件来说根本不可能(根据设计,它们是文件而不是管道或类似的东西)。唯一的可能是依靠 inotify 来实现这一点,或者使用简单的轮询方式来实现。 (这与 tail 的作用相同。)