0

Pythonプログラムは、C ++プログラムの新しいプロセスを開き、プロセスstdoutを読み取っています。今のところ問題ありません。

しかし、通信のためにこのような複数のストリームを持つことは可能ですか?stderrを誤用した場合も、2つ取得できますが、それ以上は取得できません。これをハックする簡単な方法は、一時ファイルを使用することです。ファイルシステムに迂回する必要のない、よりエレガントなものはありますか?

PS:*nix固有のソリューションも大歓迎です

4

4 に答える 4

2

UNIXシステムの場合; サブプロセスを開く通常の方法はfork()、を使用することです。これにより、開いているファイル記述子(開いているファイルまたはソケットを表す小さな整数)が子と親の両方で使用可能になり、次にexec()、新しい実行可能ファイルでファイル記述子を使用できるようになります。古いプロセスで開いていました。この機能はsubprocess.Popen()呼び出しで保持されます(引数で調整可能close_fds)。したがって、おそらくやりたいことはos.pipe()、通信するソケットのペアを作成し、次にPopen()他のプロセスを起動するために使用し、前の呼び出しによって返された各fdの引数を使用pipe()して、どのfdを使用するかを指示することです。

于 2012-06-22T21:58:10.710 に答える
0

あなたが望むのは、通信にソケットを使用することのように聞こえます。どちらの言語でもrawソケットを開くことができますが、メッセージパッシングにいくつかの追加の利点があるzeromqプロジェクトもチェックすることをお勧めします。C++PythonでHelloWorldをチェックしてください。

于 2012-06-22T21:47:23.240 に答える
0

Windowsマシンを想定しています。PythonプロセスとC++の間で情報を交換するためにクリップボードを使用してみることができます。

いくつかの一意のプロセスIDに続いて情報を割り当て、Python側でクリップボードに書き込みます.....C++側で文字列を解析します。一時ファイルを使用するのと似ていますが、すべてメモリ内で実行されます。ただし、他のアプリケーションにクリップボードを使用できないという欠点があります。それが役に立てば幸い

于 2012-06-22T23:16:51.100 に答える
0

従来の同期プログラミングと標準のPythonライブラリでは、求めていることを実現するのは困難です。代わりに、非同期プログラミングモデルとTwistedライブラリの使用を検討している場合、それは簡単なことです。プロセスの使用HOWTOでは、必要な数のプロセスと簡単に通信する方法について説明しています。確かに、Twistedには少し学習曲線がありますが、努力する価値は十分にあります。

于 2012-07-09T15:11:45.133 に答える