1

実際には、アプリケーション 1 から input.txt に入力を与えます。これにより、intern が {used pyinotify} program1 をトリガーして、output.txt ファイルを更新するこの program1 を実行しますが、output.txt から読み取っている application1 は、program1 が完了するのを待ちません。テキストファイル(output.txt)への書き込み処理、output.txtから古いデータを読み込みます。program1 のプロセスの完了を待つために Application1 が必要です。どうすればこれを行うことができますか??

import pyinotify,subprocess
def onChange(ev):
    cmd = ['/usr/bin/env', 'python','/var/www/cgi-bin/version2_1.py', ev.pathname]
    subprocess.Popen(cmd).communicate()
wm = pyinotify.WatchManager()
wm.add_watch('/var/www/cgi-bin/input.txt', pyinotify.IN_CLOSE_WRITE, onChange)
notifier = pyinotify.Notifier(wm)
notifier.loop()

これは、テキストを入力するトリガーのバックグラウンドでpython program1を実行するために使用したプログラムです。このトリガーの直後に、application1のこのステートメントを実行します out_file=open("/var/www/cgi-bin/output.txt", "r").read()

これで、application1 は program1 によって更新される前に出力のコンテンツを受け取ります!! program1 が実行を完了し、output.txt を更新するまで Aplication1 を待機させたい

plsは私にこれについてどうすればよいか考えを与えます..

ありがとうございました :)

4

1 に答える 1

3

Python でファイルの変更を監視する方法はいくつかありますが、そのほとんどはプラットフォーム固有のものです。プラットフォームを指定しなかったので、ここにクロスプラットフォーム パッケージがあります: http://packages.python.org/watchdog/

また、次の質問に対する回答も参照してください: ファイルの変更を監視するにはどうすればよいですか?

編集

inotify FAQ から:


Q: IN_MODIFY と IN_CLOSE_WRITE の違いは何ですか? IN_MODIFY イベントは、ファイルの内容が変更されたときに (たとえば、write() システムコールを介して) 発生し、IN_CLOSE_WRITE は、変更されたファイルを閉じるときに発生します。これは、変更操作ごとに 1 つの IN_MODIFY イベントが発生することを意味します (開いているファイルの操作中に何度も発生する可能性があります) が、IN_CLOSE_WRITE は (ファイルを閉じるときに) 1 回だけ発生します。

Q: IN_MODIFY と IN_CLOSE_WRITE のどちらを使用した方がよいですか? 場合によって異なります。通常、IN_CLOSE_WRITE を使用する方が適切です。これは、適切なファイルのすべての変更が発行された場合、ファイル内に安全に書き込まれるためです。IN_MODIFY イベントは、ファイルの変更が完了したことを意味する必要はありません (アプリケーションのメモリ バッファーにデータが残っている場合があります)。一方、多くのログや同様のファイルは、IN_MODIFY を使用して監視する必要があります。これらのファイルが永続的に開いているため、IN_CLOSE_WRITE を発行できない場合です。


IN_CLOSE_WRITE を監視していますか? IN_MODIFY を確認した場合、書き込まれたデータがファイルにフラッシュされる前にイベントが発生しても驚かないでしょう。

于 2011-05-14T07:59:05.763 に答える