PythonサブプロセスがWindowsでfdsを渡さないようにしますか?
-
03-07-2019 - |
質問
Pythonのサブプロセスモジュールは、デフォルトで、開いているすべてのファイル記述子を、生成するすべての子プロセスに渡します。これは、親プロセスがポートでリッスンしており、強制終了された場合、子がまだその記述子を保持しているため、リスタートして再起動を開始できないことを意味します(SO_REUSEADDRを使用しても)。子プロセスを制御することはできません。
サブプロセスのPOpenコンストラクターは、close_fds引数を受け入れます。この引数は、必要に応じて、子の記述子を閉じます。ただし、stdin / stdoutもオーバーライドされている場合は、Windowsでのみ使用できるという制限があり、これを行う必要があります。
Windowsでこれを回避する方法を知っている人はいますか?
解決
私が見つけることができる最も関連性の高い情報と思われるもの: SetHandleInformation 、で参照されていますこの記事は、あなたに指針を与えるべきです。
おそらく、pywin32やctypesを使用して、目的を達成する必要があります。
他のヒント
ウィンドウボックスがないため、これはテストされていませんが、os.dupメソッドとos.dup2メソッドを試してみたいと思います。ファイル記述子を複製し、親記述子の代わりに使用します。
所属していません StackOverflow