pybind11 の pybind11::print
文を使うと、C++ のプログラム上で Python のオブジェクトの値を表示できます。
sample.cpp
#include <pybind11/embed.h>
#include <pybind11/pybind11.h>
namespace py = pybind11;
int main(void)
{
py::scoped_interpreter interpreter;
py::module sys_module = py::module::import("sys");
py::print(sys_module);
return 0;
}
$ # M1 Mac (Ventura) + Python 3.9.6 + pybind11 2.10.3 (Homebrew)
$ clang sample.cpp -std=c++20 -lc++ -lpython3.9 -rpath /Library/Developer/CommandLineTools/Library/Frameworks -I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/Headers -I/opt/homebrew/Cellar/pybind11/2.10.3/include -L/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib -o sample
$ ./sample
<module 'sys' (built-in)>
scoped_interpreter
の使い方と、必要なヘッダファイルの詳細は pybind11 で C++ から Python インタプリタを実行する を参照してください。
参考資料
-
pybind11 で C++ から Python インタプリタを実行する
https://yokaze.github.io/2018/02/11/ -
pybind11 でキーワード引数 (kwargs) を使う
https://yokaze.github.io/2018/03/08/ -
Using Python’s print function in C++ — pybind11 documentation
https://pybind11.readthedocs.io/en/stable/advanced/pycpp/utilities.html