2010-07-18 35 views
12

Tôi muốn gọi trình duyệt chrome hoặc firefox khi tệp tôi chỉ định được sửa đổi. Làm thế nào tôi có thể "xem" tập tin đó để làm một cái gì đó khi nó được sửa đổi?Tôi làm cách nào để "xem" một tệp để sửa đổi/thay đổi?

lập trình có vẻ như các bước được .. về cơ bản thiết lập một khoảng thời gian không bao giờ kết thúc mỗi giây hoặc lâu hơn và bộ nhớ cache ngày sửa đổi ban đầu, sau đó so sánh ngày mỗi giây, khi nó thay đổi gọi X.

Trả lời

23

Như đã đề cập, bạn có thể sử dụng pyinotify:

ví dụ .:

import webbrowser 
import pyinotify 

class ModHandler(pyinotify.ProcessEvent): 
    # evt has useful properties, including pathname 
    def process_IN_CLOSE_WRITE(self, evt): 
      webbrowser.open(URL) 

handler = ModHandler() 
wm = pyinotify.WatchManager() 
notifier = pyinotify.Notifier(wm, handler) 
wdd = wm.add_watch(FILE, pyinotify.IN_CLOSE_WRITE) 
notifier.loop() 

Đây là hiệu quả hơn so với bỏ phiếu. Hạt nhân cho bạn biết khi nào nó hoạt động, mà không cần phải liên tục hỏi.

+1

Cảm ơn bạn, cảm ơn bạn. Điều đó thật tuyệt. Có một lib tương tự cho Windows (vì lý do tương thích)? – sdolan

+1

@sdolan, Windows có [Thông báo thay đổi thư mục] (http://msdn.microsoft.com/en-us/library/aa365261%28VS.85%29.aspx). Có nhiều giải pháp đa nền tảng như [QFileSystemWatcher] của pyqt (http://www.riverbankcomputing.com/static/Docs/PyQt4/html/qfilesystemwatcher.html). –

+1

@sdolan - cũng vậy, PyGTK có giám sát tệp GIO. – detly

2

Các tùy chọn khác là để sử dụng tổng kiểm tra. Bạn có thể sử dụng một mẫu tương tự như nosy.py của mũi. Tôi sử dụng một từ dingus để kiểm tra thư mục của mình để sửa đổi và chạy bộ thử nghiệm.

8

Linux Kernel có một API giám sát tập tin gọi là inotify. Một ràng buộc python là pyinotify.

Với nó, bạn có thể xây dựng những gì bạn muốn.

2

Sử dụng FAM để đặt màn hình trên tệp.

3

Cài đặt công cụ inotify và viết kịch bản lệnh shell đơn giản để xem tệp.

0

Rõ ràng, watchdog công trình trên cả Linux & OSX có thể được sử dụng để theo dõi những thay đổi trong một thư mục cũng như với các tài liệu ví dụ tuyệt vời. Nó cũng hoạt động với python3.x trong trường hợp bạn không muốn bị buộc phải sử dụng python2.x

Các vấn đề liên quan