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...")
 
m (2 revisions)
 
(One intermediate revision by one other user not shown)
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]]

Latest revision as of 01:53, 28 March 2014

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")