質問: 別のスレッドが所有するファイルを表示するには? 私は、ログファイルの内容をGUIで表示するアプリケーションを構築しようとしています。これは、サブプロセスを通して呼び出す別のプログラムによって記述されています。アプリケーションはWindowsで動作し、私は制御できないバイナリです。また、このアプリケーション(誰かが気にしている場合は、Actel Designer)は、サブプロセスの出力をどのようにリダイレクトするかにかかわらず、その出力をログファイルに書き込むので、出力用のパイプを使用することはオプションではないようです。一番下の行は、別のスレッドが書き込んでいるのと同時にログファイルから読み込むように強制されているようです。私の質問は、堅牢な方法でログファイルの内容のGUIの表示を最新の状態に保つ方法があるかどうかです。 私は以下を試した: 1. 子供がいる間に定期的に読むために無礼にファイルを開きます プロセスが実行されているため、Pythonがクラッシュする(私は 私がそのファイルを読み込もうとしている間、子スレッドがファイルに書き込んでいます コンテンツ) 2. 次に、GENERIC_READとSHARED_READを使って子プロセスを呼び出す前に、ログファイル名へのファイルハンドルをオープンしようとしました。 SHARED_WRITE | SHARED_DELETEを読み込み、そのファイルから読み込みます。この方法では、ファイルは空に見えます。 私はプロのプログラマーではないし、私は1週間この上に私の髪を引っ張ってきた。
回答: `tail -f` という方法で、ファイルの変更に関する通知を登録する必要があります。 `strace tail -f logfile` を実行すると、どのシステムコールが使用されているかを知ることができます。pyinotify provides a Python interface for these file change notifications.