簡體   English   中英

將 Python 源代碼嵌入 C++ 作為字符串

[英]Embed Python source code in C++ as string

我正在編寫一個 C++ 程序,需要將 Python (3.11) 代碼嵌入其中,並使用 Python.h 來嘗試完成此操作。 一般的想法是我的 python 腳本將由 C++ 程序存儲為字符串,因為我將在運行時對源執行操作,它將包含一個“main()”function,它返回一個已知數組尺寸。

我知道我可以通過以下方式做到這一點:

...
PyObject *pName = PyString_FromString("main");
PyObject *pModule = PyImport_Import(pName)
...

但是,為了實際執行腳本,我需要將它寫入一個文件,以便 python 可以再次讀取它。 這會增加我希望避免的額外執行時間。 有沒有什么方法可以直接將 python 源代碼作為字符串傳遞並從那里開始工作? 還是我只是搞砸了?

編輯:順便說一句,PyRun_SimpleString 沒有執行我想要的操作,因為它不會從執行的代碼中返回任何內容。

感謝尼克在評論中找到答案。 PyRun_String 的用法示例: https://schneide.blog/2011/10/10/embedding-python-into-cpp/ ,並從 python 腳本中提取列表變量https://docs.python.org/3/c -api/list.html最后的科學怪人:

PyObject *main = PyImport_AddModule("__main__");
PyObject *globalDictionary = PyModule_GetDict(main);
PyObject *localDictionary = PyDict_New();
PyRun_String("a=[0, 1, 2, 3, 4, 5]", Py_file_input, globalDictionary, localDictionary);
    
PyObject *result = PyDict_GetItemString(localDictionary, "a");

double a[6];
for (int i = 0; i < PyList_Size(result); i++) {
    a[i] = PyFloat_AsDouble(PyList_GetItem(result, i));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM