11

コンソールから引数を取り込んでそれらの引数を解析し、コンソールに「helloworld」を出力するコードhelloword.cppを実行したいと思います。

ここで、Pythonスクリプトparsearguments.pyからこれらの引数を解析したいと思います。

したがって、たとえば:

def parse_arguments:
  ...# some code
  return arguments

では、PythonとC++の間でどのように通信するのですか。私は読んでいて、cython、boost pythonがオプションであることを確認しましたが、正しい単純なhelloworldの例を見つけるのに苦労しています。

任意の提案をいただければ幸いです。ありがとう

4

4 に答える 4

11

PythonでC++コードを実行するには、ブーストPythonを効果的に使用できます。チュートリアルは次のとおりです 。http ://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html 一種のラッパーを作成しますあなたの外のC++コード。

Cコードの場合、Pythonにはctypesという内部ライブラリがあります。

どちらの場合も、C /C++コードを共有ライブラリにコンパイルする必要があります。

于 2012-06-20T06:20:07.963 に答える
8

Pythonで生成したテキストをC++プログラムの標準入力に渡すのはどうですか?基本的に、Pythonのsubprocessモジュールを使用してC ++プログラムを起動し、テキストを標準出力にダンプする必要があります。

C ++プログラムをバックグラウンドで個別に実行する必要がある場合は、UNIXドメインソケットなどの別の形式のプロセス間通信を試すことができます。

boost :: pythonを使用することもオプションですが、処理が少し難しい場合があります。

于 2012-06-20T06:19:52.457 に答える
4

Boost.python以外のいくつかのオプションは、SIPとSWIG(Simplified Wrapper and Interface Generator)です。Boostと同様に、SIPとSWIGはオープンソースです。

SWIGは特に強力ですが、少し毛深いです。これは、Python、Perl、Lua、Tcl / Tk、Ocaml、Ruby、Javaを含む(完全なリストではない)他の言語のボートロードとのCおよびC++のインターフェースのサポートを提供します。SWIGの1つの側面は、C++ヘッダーを解析することです。これには利点と落とし穴があります。利点は、インターフェイスを生成する作業のほとんどを実行することです。欠点は、C ++ 2003の暗い部分の一部を処理できず、C++11にまったくステップアップしていないことです。もう1つの欠点は、大規模なプロジェクトのコンパイルが遅くなることです。とても、とても遅い。

于 2012-06-20T06:50:25.333 に答える
2

boost.pythonを使用することは、私にとって良い解決策のように思えます。ただし、C ++の経験によっては、これは非常に難しい場合があります。開始するための良いポイントはここにあります:

http://wiki.python.org/moin/boost.python

Boost.Pythonを使用すると、C ++クラスとメンバー関数をPythonにエクスポートして、そこから使用できるようになります。

于 2012-06-20T06:20:30.193 に答える