別のスレッドが所有するファイルを表示するには?

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

私は以下を試した:

  1. 子供がいる間に定期的に読むために無礼にファイルを開きます プロセスが実行されているため、Pythonがクラッシュする(私は 私がそのファイルを読み込もうとしている間、子スレッドがファイルに書き込んでいます コンテンツ)
  2. 次に、GENERIC_READとSHARED_READを使って子プロセスを呼び出す前に、ログファイル名へのファイルハンドルをオープンしようとしました。 SHARED_WRITE | SHARED_DELETEを読み込み、そのファイルから読み込みます。この方法では、ファイルは空に見えます。

私はプロのプログラマーではないし、私は1週間この上に私の髪を引っ張ってきた。

1
したがって、ログファイルを生成するスレッドは、ファイルがいつ更新されるかを制御します。その場合、更新スレッドは、読み取りスレッドがファイルを読み取っている間に何をしているのかを停止し、読み取りスレッドのファイルを閉じて、更新スレッドの更新を再度許可します。別の考え方:ファイルを3番目のスレッドが所有し、最初の2つのスレッドを取得して、3番目のスレッドに必要な情報を要求します。
追加された 著者 Oliver,
ログファイルは、管理していないサードパーティのソフトウェアによって生成されます。これは、コンピュータ上の.exeファイルです。コマンドライン(またはサブプロセス)から起動されると、すぐに別のスレッドが生成されます。あなたが記述しているように、その生成されたスレッドを制御する必要があると聞こえますが、それを達成する方法はありません。
追加された 著者 muse_ee,

1 答え

1
追加された
提案していただきありがとうございます!私はpyinotifyがWindowsで動作するとは思わないが、Watchdog( packages.python.org/watchdog を参照してください)。私はそれを使う方法を学び、このアプローチがうまくいくかどうかを知りましょう
追加された 著者 muse_ee,
ファイル通知ベースのソリューション(ウォッチドッグ)を使用して私の問題を解決しました。
追加された 著者 muse_ee,