Ex、Linux OSのいくつかのディレクトリでファイルイベントを削除して追加する必要があります。私はそれらのためのinotifyとPythonのラッパーのようなlibsを見つけましたが、もし私がos.listdir(path)
毎秒出力を見なければならないか、またはそのようなタスクを達成するためのいくつかの方法がありますか?他の低レベルライブラリなしでPythonを使ってファイルシステムイベントを監視する
答えて
出典:http://code.activestate.com/recipes/215418-watching-a-directory-tree-on-unix/
watch_directories()関数は、パスと呼び出し可能オブジェクトのリストを取り、その後、繰り返し削除されますか、その修正時刻が変更されたファイルを監視、それらのパスをルートディレクトリツリーを横断します。呼び出し可能オブジェクトは、変更されたファイルと削除されたファイルを含む2つのリストを渡されます。あなたがデーモンにジョブを送信するためにいくつかの方法が欲しいが、そのようなソケットやパイプなどのいくつかのIPCメカニズムを使用したくない場所
from __future__ import nested_scopes
import os, time
def watch_directories (paths, func, delay=1.0):
"""(paths:[str], func:callable, delay:float)
Continuously monitors the paths and their subdirectories
for changes. If any files or directories are modified,
the callable 'func' is called with a list of the modified paths of both
files and directories. 'func' can return a Boolean value
for rescanning; if it returns True, the directory tree will be
rescanned without calling func() for any found changes.
(This is so func() can write changes into the tree and prevent itself
from being immediately called again.)
"""
# Basic principle: all_files is a dictionary mapping paths to
# modification times. We repeatedly crawl through the directory
# tree rooted at 'path', doing a stat() on each file and comparing
# the modification time.
all_files = {}
def f (unused, dirname, files):
# Traversal function for directories
for filename in files:
path = os.path.join(dirname, filename)
try:
t = os.stat(path)
except os.error:
# If a file has been deleted between os.path.walk()
# scanning the directory and now, we'll get an
# os.error here. Just ignore it -- we'll report
# the deletion on the next pass through the main loop.
continue
mtime = remaining_files.get(path)
if mtime is not None:
# Record this file as having been seen
del remaining_files[path]
# File's mtime has been changed since we last looked at it.
if t.st_mtime > mtime:
changed_list.append(path)
else:
# No recorded modification time, so it must be
# a brand new file.
changed_list.append(path)
# Record current mtime of file.
all_files[path] = t.st_mtime
# Main loop
rescan = False
while True:
changed_list = []
remaining_files = all_files.copy()
all_files = {}
for path in paths:
os.path.walk(path, f, None)
removed_list = remaining_files.keys()
if rescan:
rescan = False
elif changed_list or removed_list:
rescan = func(changed_list, removed_list)
time.sleep(delay)
if __name__ == '__main__':
def f (changed_files, removed_files):
print changed_files
print 'Removed', removed_files
watch_directories(['.'], f, 1)
このレシピは便利です。代わりに、デーモンはサブミッションディレクトリに座って見ることができ、ファイルまたはディレクトリをサブミッションディレクトリにドロップすることによってジョブをサブミットすることができます。
ロックは考慮されません。 watch_directories()関数自体は本当にロックを行う必要はありません。 1回のパスで修正が欠けても、次のパスで修正されます。ただし、ジョブが監視対象のディレクトリに直接書き込まれている場合、呼び出し可能なオブジェクトは、ジョブファイルが半分だけ書き込まれている間に実行を開始することがあります。これを解決するには、ロックファイルを使用できます。呼び出し元は実行時にロックを取得しなければならず、サブミッターは新しいジョブを追加するときにロックを取得する必要があります。より簡単なアプローチは、rename()システムコールをアトミックにすることです。監視されていない一時ディレクトリにジョブを書き込み、ファイルが完成したらos.rename()を使用してsubmissionディレクトリに移動します。
- 1. 低レベルのフックを監視する[C]
- 2. pythonを使ってグローバルキーボードイベントを監視する方法は?
- 3. SwingEventMonitorを使用して他のアプリケーションを監視しますか?
- 4. Sensuを使用してPythonスクリプトを監視する方法は?
- 5. 他のアプリを監視するAndroid FileObserver?
- 6. Pythonで発信インターネットリクエストを監視する
- 7. pythonファイルの監視
- 8. 私のダウンロード使用状況をPythonで監視します
- 9. monit監視ツールを使ってDelayed_jobを設定します
- 10. MacでCocoaを使って他のアプリケーションを監視することはできますか?
- 11. PythonでApp EngineのCPU使用量を監視する
- 12. Javascript:他のスクリプトによってスローされた例外を監視する
- 13. glib/gioを使ってルートディレクトリを監視する方法は?
- 14. ruby guard gemを使ってC++ファイルを監視する
- 15. PHPを使用してアクティブなサーバー接続を監視する
- 16. Pythonを使用してBluetoothのストリームを監視する方法は?
- 17. 監視しているJMXを使ってTomcatを「snmpwalk」する方法
- 18. プロセスを起動してイベントを監視して監視します
- 19. Python Requests/urllib - 帯域幅の使用量を監視する
- 20. ブロブストアを使用してlog4netを設定して監視する
- 21. SSHトンネルなしでCactiを使用してリモートサーバーを監視する方法は?
- 22. プロセス監視 - Python/Ubuntu/Linux
- 23. Pythonマルチプロセッシング - メモリ使用量を監視するには?
- 24. ダウンロードリンクを監視して保護する
- 25. RegNotifyChangeKeyValueを使用して64ビットキーの変更を監視する
- 26. ウェブインタフェースを使用してsolrのサーバログを監視する
- 27. Tomcat内でWebアプリケーションを監視する - (Tomcat監視ではない)
- 28. Intermapperを使用したPostgresの監視
- 29. gdbを使ってC++の動的配列を "監視"する方法は?
- 30. streaming twitter apiを使ってjavaのハッシュタグを監視する方法は?
これらのラッパーには何が問題なのですか? – eumiro
私はちょうど何かextライブラリを使用することが許可されていないタスクがあります – User