如何显示另一个线程拥有的文件?

时间:2011-10-27 14:43:30

标签: python

我正在尝试构建一个应用程序,在GUI中显示日志文件的内容,由我通过子进程调用的单独程序编写。该应用程序在Windows中运行,是一个我无法控制的二进制文件。此外,无论我如何重定向子进程的输出,此应用程序(Actel Designer,如果有人关心)将其输出写入日志文件,因此使用管道输出似乎不是一个选项。最重要的是,我似乎被迫从另一个线程写入它的同时从日志文件中读取。我的问题是,是否有一种方法可以保持GUI以健壮的方式显示日志文件的内容是最新的?

我尝试了以下内容:

  1. 在孩子的时候,天真地打开文件进行阅读 进程正在运行导致Python崩溃(我猜是因为 当我试图读取它时,子线程正在写入文件 内容)
  2. 接下来,我尝试在使用GENERIC_READ和SHARED_READ调用子进程之前打开日志文件名的文件句柄。 SHARED_WRITE | SHARED_DELETE并从该文件读回。使用此方法,文件显示为空
  3. 感谢您提供的任何帮助 - 我不是一名专业的程序员,而且我已经把头发拉了一个星期。

1 个答案:

答案 0 :(得分:1)

您应该按照tail -f的方式注册文件更改通知(您可以通过执行strace tail -f logfile找出它使用的系统调用)。

pyinotify为这些文件更改通知提供了一个Python接口。