2024年1月27日土曜日

c++からpythonを呼び出す


webスクレイピングってなに??ってことでpythonでBeautifulSoupを使ったスクリプトを書いてみたのが2019年。今ならGUIはQt一択なんだけど当時は色々使っていて、wxpythonで書いた。これが意外と重宝してほぼ毎日使っている。でも、wxって起動が遅い。これがずっと気になっていて、スパッと起動するんならやっぱりcそのものだなと、cで書き直すことにしたらかなりハマった話。

まずスクレイピングをcで実装するのが気が重く、この部分だけはpythonコードを利用することにした。そうなるとcからpythonを呼び出し、戻り値として文字列を受け取る必要がある。そのためには単にスクリプトを外部のプロセスとして起動するのではなく、スクリプトを取り込んでそこの関数をCから呼び出すようにしなければいけない。そのためにはcソースにpython.hをインクルードするんだが、まずここでハマった。

インクルードの条件を書くと
①プロジェクトへのインクルードパスの追加
②プロジェクトへのライブラリパスの追加
③プロジェクトへのライブラリの追加
まあ当たり前のことではあるんだけど、久しぶりのCでこれに結構時間がかかった。
ちなみにヘッダとかライブラリはpythonをインストしてあればそこにあるのであとはプロジェクトに追加するだけだけど、デバッグするときはデバック用のライブラリが必要で、これは無い。AIに聞いたら自分でpythonのソースを落としてきてデバッグでビルドしろとのことだった ┐(´∀`)┌。これはちょっと引くよな。ということでデバッグは出来ないまま開発は進むのだった。

インクルードしてしまえば結構簡単にpythonとは連携できるんだけど、データの受け渡しに特定の型を使うのでここがちょっと面倒かな。今回は引数は渡さなかったけど文字列を受け取るのでpyObjectからどうやって文字列を取り出すのか、その処理がちょっとわかんなくてAIに聴きながらやった。




書きかけ~

0 件のコメント:

コメントを投稿