代码之家  ›  专栏  ›  技术社区  ›  tobsen

使用#include“Python.h”在C++中运行Python2.7脚本

  •  0
  • tobsen  · 技术社区  · 8 年前

    我想运行一个Python脚本,该脚本使用一个库,该库在c++程序中仅适用于Python2.7。

    我在发布模式下运行它,因为在VS 2015下我没有python27\u d.lib。

    PyObject *pName, *pModule, *pDict, *pFunc, *pValue;
    Py_Initialize();
    std::string name = "C:/pathToProgamm/pythonHTTPS.py"
    pName = PyString_fromString(name.c_strg());
    pModule = Pyimport_Import(pName);
    pDict = PyModule_GetDict(pModule);
    

    这里我得到了python27错误。pdb未加载

    我试图通过在调试下更改为“仅指定模块”(从“所有模块,除非排除”)来解决它->VS 2015中的符号 python27的符号加载。已跳过dll,因为未在“包含的模块”列表中指定它。我还尝试下载pdb文件并指向它,但这也不起作用。

    我想做的是:

    if (pName = PyString_FromString(name_i.c_str()))
        {
            if (pModule = PyImport_Import(pName))
            {
                if (pDict = PyModule_GetDict(pModule))
                {
                    if (pFunc = PyDict_GetItemString(pDict, NULL))
                    {
                        std::cout << "success" << std::endl;
                    }
                    else
                    {
                        std::cout << "failed pFunc" << std::endl;
                        return;
                    }
                }
                else
                {
                    std::cout << "failed pDict" << std::endl;
                    return;
                }
            }
            else
            {
                std::cout << "failed pModule" << std::endl;
                return;
            }
        }
        else
        {
            std::cout << "failed pName" << std::endl;
            return;
        }
    

    但结果是--gt;失败的pModule

    因此,错误在pModule=Pyimport\u import(pName)中;

    有谁能告诉我为什么失败,以及如何为我的python版本(2.7.14)运行调试

    1 回复  |  直到 8 年前
        1
  •  0
  •   tobsen    8 年前
    #ifdef _DEBUG
    #define _DEBUG_WAS_DEFINED 1
    #undef _DEBUG
    #endif
    
    #include <Python.h>
    
    #ifdef _DEBUG_WAS_DEFINED 1
    #define _DEBUG 1
    #endif
    

    这为我解决了调试错误(我仍然无法在python脚本中调试,但我不需要)。

    重要的是,不要使用python模块的名称。py。