【问题标题】:Errors using sys from Python Embedded in C++使用 C++ 中嵌入的 Python 中的 sys 时出错
【发布时间】:2016-09-22 17:02:46
【问题描述】:

我正在使用 Eclipse 来运行 C++。在我的代码中,我使用 Python 的高级嵌入来运行一个函数。当我尝试使用 sys 并导入它时。我得到了错误:

致命的 Python 错误:sys.argv 没有内存

代码:

#include <python3.4m/Python.h>
#include <iostream>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(int argc, char **argv)
{

    Py_Initialize();
    PySys_SetArgv(argc, (wchar_t**)argv);
    PyRun_SimpleString("import sys\n");
    Py_Finalize();
    return 0;
}

当我从终端运行 .exe 时,我得到了

ValueError: 字符 U+384d2f2e 不在范围 [U+0000; U+10ffff] 中止

感谢您提供解决此问题的任何帮助。 谢谢。

【问题讨论】:

    标签: python c++ unicode sys python-embedding


    【解决方案1】:

    错误是 Python 期望 **argv 指向一组 unicode 值。相反,argv 指向的是字符。

    解决这个问题:

    wchar_t **wargv;
    wargv = (wchar_t**)malloc(1*sizeof(wchar_t *));
    *wargv = (wchar_t*)malloc(6*sizeof(wchar_t));
    **wargv = L'argv1';
    
    Py_Initialize();
    PySys_SetArgv(1, (wchar_t**)wargv);
    PyRun_SimpleString("import sys\n"
                       "print('test')\n");
    Py_Finalize();
    return 0;
    

    希望这对其他人有所帮助。

    【讨论】:

    • 查看我的答案以获得干净的解决方案
    【解决方案2】:

    你必须这样做:

    unsigned int mySize = 200;
    wchar_t* wargv = Py_DecodeLocale(argv[0], &mySize);
    PySys_SetArgv(1, &wargv);
    

    通过这种方式,一切都很干净,可以正常工作并且没有编译警告

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多