C++ 调用Python:PyRun_SimpleFile 无法执行

在学习C++调用python文件过程中,使用PyRun_SimpleFile()语句时无法实现执行python文件的情况。

例程如下:

#include "python.h"
int main()
{        
    Py_Initialize();        
    char szFile[] = "Test002.py";
    FILE* fp = fopen(szFile, "r");
    if(fp && PyRun_SimpleFile(fp,szFile) != 0)
    {
		fclose(fp);
		printf("PyRun_SimpleFile(%s)failed!", szFile);
 		return -1;
	}
	Py_Finalize();        
    return 0;
}
Test002.py

print("this is a test file")

按照这个例程执行后,无法执行Test002.py中的语句。

经过排查发现是由于py文件的路径不正确,现提供如下两种可以正常调用python文件的写法
第一种:

#include "python.h"
int main()
{        
    Py_Initialize();        
    PyObject *obj = Py_BuildValue("s", "C:/Users/zhang/Desktop/test_python37/ConsoleApplication1/x64/Debug/Test002.py");
	FILE *file = _Py_fopen_obj(obj, "r+");
	if (file != NULL)
	{
		PyRun_SimpleFile(file, "Test002.py");
	}
	Py_Finalize();        
    return 0;
}

运行结果如下:
在这里插入图片描述
这种方法需要设置python文件的绝对路径。

第二中:

#include "python.h"
int main()
{        
    Py_Initialize();     
       
    PyObject * moduleName = PyUnicode_FromString("Test002");
	PyObject * pluginModule = PyImport_Import(moduleName);

	if (pluginModule == nullptr)
	{
		PyErr_Print();
		return 0;
	}
	
	Py_Finalize();        
    return 0;
}

运行结果如下:
在这里插入图片描述
这种方式不需要设置python文件的绝对路径。

参考:
1、Why does the Python/C API crash on PyRun_SimpleFile?
2、C++调用Python浅析

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值