来自 Python 的 C-API - 如何获取字符串?

Posted

技术标签:

【中文标题】来自 Python 的 C-API - 如何获取字符串?【英文标题】:C-API from Python - How can I get a string? 【发布时间】:2020-10-12 11:21:09 【问题描述】:

Euler Math Toolbox (www.euler-math-toolbox.de) 具有与 Python 2 的接口。现在它应该与 Python 3 接口。但我似乎无法读取 Python 的输出。下面是我正在尝试做的一个简单示例。代码在最后一步 PyBytes_AsString() 中失败。可能,我在这里完全偏离了轨道。

请指教。


#include <stdio.h>
#include <Python.h>

const char* pystart = "t = \"test\"";

int main()

    printf("Test Programm for Python 3.8\n");

    Py_Initialize();

    PyObject* pModule = PyImport_AddModule("__main__"); //create main module
    if (!pModule)
    
        printf("Could not create main module in Python.");
        return 0;
    

    if (PyRun_SimpleString(pystart) == -1)
    
        printf("Could not run pystart.");
        return 0;
    

    PyObject* t = PyObject_GetAttrString(pModule, "t");
    if (!t)
    
        printf("Could not get t.");
        return 0;
    
    char* out = PyBytes_AsString(t);
    if (!out)
    
        printf("Could not get the string.");
        return 0;
    
    printf(out);

    return 1;

【问题讨论】:

【参考方案1】:

诀窍当然是在应用 PyBytes_AsString() 之前使用 PyUnicode_AsEncodedString(t,"utf-8","strict") 从 unicode 转换。

【讨论】:

以上是关于来自 Python 的 C-API - 如何获取字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Python / C-Api:向模块添加类

使用 Python C-API 强制类型转换

Python C-API:PyDict_GetItem 上的分段错误,可能的参考问题?

Python C-API 和 Numpy:import_array 上的核心转储

在 ubuntu 20.04 LTS 上使用 python Xlib 或 C-API 操作第二个(辅助)鼠标输入

c ++ copy string literal(来自C)[关闭]