2017-08-08 18 views
0

私は3つの値の結果を評価するC++プログラムを作成しています。複数の出力をC++アプリケーションから返す

このアプリケーションをPythonスクリプトで呼びたいと思います。これらの値は、これらの値を受け取る必要があります。

問題は、C++のmain関数は1つの整数値だけを返すことです。

この問題を解決するにはどうすればよいですか?

ありがとうございます!

+2

stdoutまたはstderrを使用して、https://stackoverflow.com/questions/2502833/store-output-of-subprocess-popen-call-in-a-stringの1つの方法について説明します。 – jodag

+5

mainからの結果を返すことは、*プログラムの終了ステータスではなく、悪い考えです。 – StoryTeller

答えて

2

中間値をファイルに保存するか、stdoutにC++コードで書き込むことができます。今のpython使用subprocess.PopenでのC++のコードを実行し、PIPEを使用してstdoutをキャプチャする

#include <iostream> 

int main() 
{ 
    std::cout << "param1,param2,param3\n"; 
} 

from subprocess import Popen, PIPE 

process = Popen('./nameofyourexe', stdout=PIPE, stderr=PIPE) 

output, err = process.communicate() 

if process.returncode == 0: 
    print(output.decode().strip().split(',')) 
else: 
    print('error: %s' % err.decode()) 

3つのパラメータをどの形式で出力するかはあなた次第です。私はそれらをすべて同じ行に置き、カンマで区切り、単にsplitをpythonコードに入れます。あなたのニーズに応じて、それを違う方法で選ぶこともできます。

C++をコンパイルしてpythonを同じディレクトリから実行した後。私は、現在のディレクトリからプログラムを実行するために'./nameofyourexe'./接頭辞)を使用

:出力は注意

['param1', 'param2', 'param3'] 

です。これはウィンドウズ(私はLinux上にある)や現在のものとは別のディレクトリから実行すると動作しないかもしれません。この問題を回避するには、cwdパラメータをPopenに渡して、exeを含むディレクトリを指定します。

関連する問題