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

时间:2017-12-05 12:00:35

标签: python c++ debugging visual-studio-2015 include

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

我在发布模式下运行它,因为我在VS 2015下没有python27_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 not loaded

我尝试通过更改为“仅指定的模块”(来自“所有模块,除非排除”)在VS 2015中的Debugging-> Symbols下解决它,但后来我得到了 跳过了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_import(pName);

任何人都可以告诉我为什么会失败以及如何为我的python版本运行调试(2.7.14)

1 个答案:

答案 0 :(得分:0)

#ifdef _DEBUG
#define _DEBUG_WAS_DEFINED 1
#undef _DEBUG
#endif

#include <Python.h>

#ifdef _DEBUG_WAS_DEFINED 1
#define _DEBUG 1
#endif

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

重要的是给出不带.py的python模块的名称。