Pythonでプロセスを生成し、双方向の通信ができるようにしたいと思います。もちろん、Pexpectはこれを行い、実際に私が行くかもしれない方法です。ただし、それは完全に理想的ではありません。
私の理想的な状況は、標準のPythonライブラリのみを含むクロスプラットフォームの一般的な手法を使用することです。サブプロセスはかなり接近しますが、プロセスが安全に対話する前にプロセスが終了するのを待たなければならないという事実は望ましくありません。
ドキュメントを見ると、直接操作できるstdin、stdout、およびstderrファイル記述子があると書かれていますが、「これを行わないでください」という大きな警告があります。残念ながら、この警告が存在する理由は完全には明らかではありませんが、Googleから収集したものは、OSバッファリングに関連していることであり、これらの内部バッファが失敗したときに予期せずデッドロックするコードを記述できる可能性があります(補足として、間違った方法を示し、正しい方法をいただければ幸いです)。
したがって、コードを潜在的なデッドロックの危険にさらすと、ポーリングを使用するか、実行中のプロセスを強制終了せずにインタラクティブに読み取るように選択するのが面白いかもしれないと思いました。私はクロスプラットフォームの能力を失いますが(私は思う)、それが追加のライブラリを必要としないという事実が好きです。しかし、もっと重要なことは、これがこれが良い考えであるかどうかを知りたいです。私はまだこのアプローチを試していませんが、プログラムを破壊する可能性のある落とし穴について心配しています。それは動作しますか?何をテストする必要がありますか?
私の特定のケースでは、プロセスに書き込むことができるかどうかについてはあまり心配していません。プロセスから繰り返し読み取るだけです。また、プロセスが大量のテキストをダンプすることはないと思うので、デッドロックの問題を回避したいと思いますが、それらの制限が何であるかを正確に知り、それがどこで壊れているかを確認するためのテストを作成できるようにしたいと思います。