2009-10-09 7 views
0

Vous avez déjà un morceau exemple de code (Python) pour vérifier si un répertoire a changé:Précision de mtime stat dans Windows

Mais unittest d'accompagnement échoue au hasard à moins ajouter au moins un second sommeil 2:

import unittest 
import project_creator 
import os 
import time 


class tests(unittest.TestCase): 
    def setUp(self): 
     os.makedirs('autotest') 
     f = open(os.path.join('autotest', 'new_file.txt'), 'w') 
     f.write('New file') 

    def tearDown(self): 
     os.unlink(os.path.join('autotest', 'new_file.txt')) 
     os.rmdir('autotest') 

    def test_amend_file(self): 
     changed = project_creator.watch('autotest', {}) 
     time.sleep(2) 
     f = open(os.path.join('autotest', 'new_file.txt'), 'a') 
     f.write('\nA change!') 
     f.close() 
     changed = project_creator.watch('autotest', changed[0]) 
     self.assertEqual(changed[1], [os.path.abspath(os.path.join('autotest', 'new_file.txt'))]) 

if __name__ == '__main__': 
    unittest.main() 

Est-ce que stat est vraiment limité à une précision inférieure à 1 seconde? (Edit: apparemment, avec FAT) Existe-t-il un moyen (multi-plateforme) de détecter des changements plus rapides?

+0

Voir http://stackoverflow.com/questions/943503/python-getting-file-modification-times-with-greater-resolution-than-a-second. – unwind

+0

Merci, ça répond à la première question (mon google-fu manquait évidemment quand j'ai cherché plus tôt). Je suis toujours intéressé par les méthodes alternatives (s'il y en a). – mavnn

Répondre

1

Le correct est de regarder un répertoire au lieu d'interroger les changements.

Découvrez FindFirstChangeNotification Function.
Watch a Directory for Changes est une implémentation Python.

Si la surveillance d'un répertoire n'est pas suffisamment précise, la seule alternative est probablement d'intercepter les appels de systèmes de fichiers.

+0

C'est quelque chose que j'ai regardé, mais comme indiqué ci-dessus j'ai besoin de ce code pour exécuter cross plate-forme (XP et Ubuntu en particulier). Je peux devoir abandonner et faire varier le mécanisme basé sur os. – mavnn

0

si c'était Linux, j'utiliserais inotify. il y a apparemment une fenêtre inotify équivalent - la java jnotify library a mis en œuvre - mais je ne sais pas s'il y a une implémentation de Python

+0

err oui, ce que Nick D a dit. –

1

chien de garde: http://packages.python.org/watchdog/quickstart.html

Est-ce un bon projet d'avoir des changements multi-plateforme de notification.

+0

En réponse à moi-même, je viens de découvrir que QT le fait aussi, http://doc.qt.nokia.com/latest/qfilesystemwatcher.html Ensuite, vous pouvez utiliser pyqt ou pyside pour une belle interface python. –

Questions connexes