1

Pythonのサブプロセスモジュールは、デフォルトで、開いているすべてのファイル記述子を、生成する子プロセスに渡します。これは、親プロセスがポートでリッスンしていて強制終了された場合、子がまだその記述子を所有しているため、再起動してリッスンを再開できないことを意味します(SO_REUSEADDRを使用している場合でも)。私は子プロセスを制御できません。

サブプロセスのPOpenコンストラクターはclose_fds引数を受け入れます。これにより、必要に応じて、子の記述子が閉じられます。ただし、Windowsでのみ、stdin / stdoutもオーバーライドされた場合に使用できないという制限があります。これは、私が行う必要があります。

Windowsでのこの回避策を知っている人はいますか?

4

2 に答える 2

2

私が見つけることができる最も関連性の高い情報は次のとおりです。この記事で参照されているSetHandleInformationは、ポインターを提供するはずです。

目的を達成するには、おそらく pywin32 や ctypes を使用する必要があります。

于 2009-01-02T23:11:48.293 に答える
-2

私は Windows ボックスを持っていないので、これはテストされていませんが、os.dup および os.dup2 メソッドを試してみたくなるでしょう。ファイル記述子を複製し、親の代わりにそれらを使用します。

于 2009-01-02T21:15:14.737 に答える