2016-09-05 2 views
0

端末からテキストファイルを入力して別のテキストファイルを生成するC++プログラムがあります。私はこのプログラムをPythonスクリプトから実行しています。まず最初にテキスト文字列を生成し、ファイルに保存し、C++プログラムを作成したファイルを入力としてサブプロセスとして実行し、出力テキストファイルをPythonオブジェクトに解析します。サブプロセスを使わずに直接PythonオブジェクトをC++プログラムに渡す

サブプロセスコールを使用せずにこれを行うことはできますか?言い換えれば、読み書きを避け、テキスト文字列を入力としてPython環境内でC++プログラムを実行してから、Python環境内で出力を取り込むことが可能ですか?

コードについては、community_detection_multiplexthis IPython notebookを参照してください。

+0

Pythonで書かれたC++パーサ/インタープリタがありますか?はいの場合は、素晴らしい。そうでなければ、いいえ。 –

+0

サブプロセスを生成することは本当に大きな問題ではありませんか?ファイルのセキュリティリスクを避けたい場合は、stdin/stdoutパイプリダイレクトを使用して入力/収集出力を送信することができます。 –

+0

@RichardHodgesファイルとして保存されなかった場合、PythonのC++プログラムに文字列を渡すにはどうすればよいですか? –

答えて

2

ctypesを使用できます。
C++関数をextern "c"でラップし、Cコードとしてコンパイルする必要があります。

はあなたのCを言う++関数は、次のようになります。

char* changeString(char* someString) 
{ 
    // do something with your string 
    return someString; 
} 

あなたはそのようなのpythonからそれを呼び出すことができます。

import ctypes as ct 

yourString = "somestring" 
yourDLL = ct.CDLL("path/to/dll") # assign the dll to a variable 
cppFunc = yourDLL.changeString # assign the cpp func to a variable 
cppFunc.restype = ct.c_char_p # set the return type to a string 
returnedString = cppfunc(yourString.encode('ascii')).decode() 

returnedStringが処理文字列を持っています。

+0

理想的には、ファイルを保存しないことをお勧めします。 –

+0

私のソリューションはC++関数を呼び出し、それに文字列を渡します。あなたがPythonでファイルを開き、それを(開いたままで)C++に渡したいのであれば、これはあなたにとって適切な解決策ではありません。 – galah92

+0

私はこの解決策がファイルとして格納された文字列を持っていることを理解しています。 –

関連する問題