2009-10-09 9 views
0

확인하기 위해 (파이썬) 코드의 예 조각을 가지고정확도

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

통계가 실제로 1 초 정확도보다 나 빠지나요? (편집 : 외관상으로는 FAT 사용) 더 빠른 변경을 감지하는 (크로스 플랫폼) 방법이 있습니까?

+0

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

+0

고마워요, 그 첫 번째 질문에 대한 답변 (이전에 검색했을 때 내 google-fu는 분명히 부족했습니다). 나는 여전히 대체 방법에 관심이있다 (있는 경우). – mavnn

답변

1

올바른 방법은 변경 사항을 폴링하는 대신 디렉토리를 보는 것입니다.

체크 아웃 FindFirstChangeNotification Function.
Watch a Directory for Changes은 Python 구현입니다.

디렉토리 감시가 정확하지 않으면 아마 유일한 대안은 파일 시스템 호출을 가로 채는 것입니다.

+0

이것은 내가 조사한 것입니다. 그러나 위에서 언급했듯이 크로스 플랫폼 (XP와 우분투)을 실행하려면이 코드가 필요합니다. os를 기반으로 메커니즘을 포기하고 바꿔야 할 수도 있습니다. – mavnn

0

만약 이것이 리눅스라면, 나는 inotify를 사용할 것입니다. 거기에 상응하는 inotify를 윈도우 분명히입니다 - 자바 jnotify library 그것을 구현했습니다 -하지만 파이썬 구현에게이 있는지 모르겠어

+0

err yea, Nick D가 말한 것. –

1

워치 독 : http://packages.python.org/watchdog/quickstart.html

일부 멀티 플랫폼 알림을 변경해야 할 수있는 좋은 프로젝트입니다.

+0

나 자신에게 대답하기 만하면 QT가 역시 그렇게한다는 것을 알았습니다. http://doc.qt.nokia.com/latest/qfilesystemwatcher.html 그런 다음 python이나 pyside를 사용하여 멋진 파이썬 인터페이스를 만들 수 있습니다. –