2017-12-11 1 views
0

私は2つのプログラムを持っています。私の主なプログラムはPythonであり、私はマシンに接続する必要があり、私はこのマシンを使用することができる唯一の方法は、コンポーザーがくれたC++で作られたdll/libですので、C++で別のものを持っています。PythonからC++へのデータをパラメータまたはファイルとして送信していますか?

私のPythonでは、私はデータベースから何千ものポイントを取得しています。私はそれらのいくつかの操作をしています。それらのポイントは、クラスの異なる配列に保管されています。

今、私はポイントをC++プログラムに送信する必要があり、私はどのように不思議に思っていましたか。私はそれらをC++プログラムのメインにパラメータとして送ることができますが、コマンドラインは長すぎるので、長すぎないとしても、これは本当に悪い習慣になると思います。涼しいだろう!)。

実際には、私のpythonプログラムでこのファイル内のすべてのcoordonatesを含むファイルを生成し、それをC++に送信することも考えていますが、それをC++で解析する必要があります。 それを行うのは良い方法ですか?それとも他の解決策が良いでしょうか?

+0

btw [データは既に複数形](https://www.theguardian.com/news/datablog/2010/jul/16/data-plural-singular) – user463035818

+0

そうです。私はそれを修正するつもりです。おかげで、私の英語のために残念です^^ ' – Stephie

答えて

2

いくつかの方法:

  1. 使用subprocess.Popen()stdin=subprocess.PIPEとし、使用ctypes C++側に
  2. 利用の一時ファイル、テキストファイルやその他のファイルのいずれか
  3. それを解析し、行ごとにデータ1を書き込み、共有ライブラリとしてC++の部分をロードして、直接PythonからC++関数を呼び出してください。
  4. Pythonのstructモジュールを使用して、PythonのデータをC構造体にエンコードします。書式設定と文字列解析 - subprocess.Popen(C++ではstdinのバイナリデータを読み込みます)、テンポラリファイル(バイナリモードで開く)、または​​(構造体へのポインタを直接ライブラリに渡します関数)

なぜコマンドラインで引数を渡すのが問題なのか、OSには制限があります。 getconf ARG_MAX

+0

私はどこかの制限や引数が4096だったと読んでいます。しかし、たとえば、私がいつも1000の引数を持っていることを知っていれば、そのたびにコマンドラインを解析するのです? – Stephie

+0

AFAIK制限はバイト数であり、引数の数ではありません。したがって、引数が100個の場合、4096は1引数につき~39バイトを与えます(区切り記号として1スペースと仮定し、(4096-99)/ 100を使用して計算し、コマンド長自体を考慮しません)。 –

関連する問題