This is a read-only mirror of pymolwiki.org

Difference between revisions of "Monitor file continuously"

From PyMOL Wiki
Jump to navigation Jump to search
(Created page with "This script can be used to continuously check the modification timestamp on a file (any format, although this example assumes it's a PDB file), and re-loads it whenever the times...")
 
Line 37: Line 37:
 
   monitor = pymol_file_monitor("status.pdb")
 
   monitor = pymol_file_monitor("status.pdb")
 
</source>
 
</source>
 +
 +
[[Category:Script_Library|Monitor file continuously]]
 +
[[Category:System_Scripts]]

Revision as of 22:00, 23 January 2012

This script can be used to continuously check the modification timestamp on a file (any format, although this example assumes it's a PDB file), and re-loads it whenever the timestamp changes. As written it is intended to be started from the command line, but this is not a requirement.

The Code

from pymol import cmd
import threading
import time
import os
import sys

class pymol_file_monitor (object) :
  def __init__ (self,
      file_name, 
      time_wait=1) : # time in seconds between mtime check
    self.file_name = file_name
    self.time_wait = time_wait
    self.watch = True # this can be toggled elsewhere to stop updating
    self.mtime = 0
    t = threading.Thread(target=self.check_file)
    t.setDaemon(1)
    t.start()
    print "Watching file %s" % file_name

  def check_file (self) :
    while (self.watch) :
      if (os.path.exists(self.file_name)) :
        print "checking..."
        mtime = os.path.getmtime(self.file_name)
        if (mtime > self.mtime) :
          self.mtime = mtime
          print "Re-loading %s" % self.file_name
          cmd.load(self.file_name, state=1)
      time.sleep(self.time_wait)

if (__name__ == "pymol") :
  monitor = pymol_file_monitor("status.pdb")