Pythonプログラムは、C ++プログラムの新しいプロセスを開き、プロセスstdoutを読み取っています。今のところ問題ありません。
しかし、通信のためにこのような複数のストリームを持つことは可能ですか?stderrを誤用した場合も、2つ取得できますが、それ以上は取得できません。これをハックする簡単な方法は、一時ファイルを使用することです。ファイルシステムに迂回する必要のない、よりエレガントなものはありますか?
PS:*nix固有のソリューションも大歓迎です
Pythonプログラムは、C ++プログラムの新しいプロセスを開き、プロセスstdoutを読み取っています。今のところ問題ありません。
しかし、通信のためにこのような複数のストリームを持つことは可能ですか?stderrを誤用した場合も、2つ取得できますが、それ以上は取得できません。これをハックする簡単な方法は、一時ファイルを使用することです。ファイルシステムに迂回する必要のない、よりエレガントなものはありますか?
PS:*nix固有のソリューションも大歓迎です
UNIXシステムの場合; サブプロセスを開く通常の方法はfork()
、を使用することです。これにより、開いているファイル記述子(開いているファイルまたはソケットを表す小さな整数)が子と親の両方で使用可能になり、次にexec()
、新しい実行可能ファイルでファイル記述子を使用できるようになります。古いプロセスで開いていました。この機能はsubprocess.Popen()
呼び出しで保持されます(引数で調整可能close_fds
)。したがって、おそらくやりたいことはos.pipe()
、通信するソケットのペアを作成し、次にPopen()
他のプロセスを起動するために使用し、前の呼び出しによって返された各fdの引数を使用pipe()
して、どのfdを使用するかを指示することです。
あなたが望むのは、通信にソケットを使用することのように聞こえます。どちらの言語でもrawソケットを開くことができますが、メッセージパッシングにいくつかの追加の利点があるzeromqプロジェクトもチェックすることをお勧めします。C++とPythonでHelloWorldをチェックしてください。
Windowsマシンを想定しています。PythonプロセスとC++の間で情報を交換するためにクリップボードを使用してみることができます。
いくつかの一意のプロセスIDに続いて情報を割り当て、Python側でクリップボードに書き込みます.....C++側で文字列を解析します。一時ファイルを使用するのと似ていますが、すべてメモリ内で実行されます。ただし、他のアプリケーションにクリップボードを使用できないという欠点があります。それが役に立てば幸い