2011-10-27 1 views
1

私は、サブプロセスを通して呼び出す別のプログラムによって書き込まれたログファイルの内容をGUIで表示するアプリケーションを構築しようとしています。アプリケーションはWindowsで動作し、私は制御できないバイナリです。また、このアプリケーション(誰かが気にしている場合は、Actel Designer)は、サブプロセスの出力をどのようにリダイレクトするかにかかわらず、その出力をログファイルに書き込むので、出力用のパイプを使用することはオプションではないようです。一番下の行は、別のスレッドが書き込んでいるのと同時にログファイルから読み込むように強制されているようです。私の質問は、堅牢な方法でログファイルの内容のGUIの表示を最新の状態に保つ方法があるかどうかです。別のスレッドが所有するファイルを表示する方法は?

私は次のことを試してみた: プロセスが実行されている子供が 子スレッドがファイルに書き込んでいるので、(私は推測しているクラッシュへのPythonを起こしながら

  1. は、単純に、定期的に読み込むためのファイルを開きます私はその中で の内容を読もうとしています)
  2. 次に、GENERIC_READとSHARED_READを使って子プロセスを呼び出す前に、ログファイル名にファイルハンドルをオープンしようとしました。 SHARED_WRITE | SHARED_DELETEを読み込み、そのファイルから読み込みます。このアプローチでは、ファイルが空に見えます

私はプロのプログラマーではありませんし、私は1週間この上に私の髪を引っ張ってきました。

+0

ログファイルを生成するスレッドは、ファイルがいつ更新されるかを制御しますか?その場合、更新スレッドは、読み取りスレッドがファイルを読み取っている間に何をしているのかを停止し、読み取りスレッドのファイルを閉じて、更新スレッドの更新を再度許可します。別の考え方:ファイルを3番目のスレッドが所有し、最初の2つのスレッドを取得して、3番目のスレッドに必要な情報を要求します。 – Oliver

+0

ログファイルは、私が制御できないサードパーティのソフトウェアによって生成されます。これは、コンピュータ上の.exeファイルです。コマンドライン(またはサブプロセス)から起動されると、すぐに別のスレッドが生成されます。あなたが記述しているもののように思えますが、そのスレッドを制御する必要があります。私はそれを達成する方法は見当たりません。(提案にもオープン!) –

答えて

1

を実行して、どのシステムコールが使用されているかを知ることができます。tail -fのファイル変更に関する通知を登録する必要があります。

pyinotifyは、これらのファイル変更通知のためのPythonインターフェイスを提供します。

+0

提案をありがとう!私はpyinotifyがWindowsで動作するとは思っていませんが、Watchdog(http://packages.python.org/watchdog/)と似たようなことをする別のモジュールが見つかりました。私はそれを使用する方法を学び、このアプローチがうまくいくかどうかを知らせます –

+1

ファイル通知ベースのソリューション(ウォッチドッグ)を使用すると、私の問題が解決しました。 –

関連する問題