在C++中嵌入Python代码运行报错:未声明编码的SyntaxError
解决C++嵌入Python时的SyntaxError编码问题
哦,我一眼就看穿问题所在了——你居然把自己编译好的C++可执行文件当成Python脚本去读取了!
错误根源
你代码里用了fopen(argv[0],"r"),而argv[0]指向的是当前运行的程序路径,也就是那个叫./cppPython的二进制可执行文件。这玩意儿根本不是纯文本的Python代码,里面全是机器码和各种非ASCII的二进制字符,Python解释器尝试解析它的时候,自然会抛出编码错误。
正确的解决步骤
1. 分离Python代码
把你要执行的Python逻辑单独存成一个纯文本的.py文件,比如命名为script.py,如果代码里有非ASCII字符,记得在文件开头加上编码声明:
# -*- coding: utf-8 -*- # 这里写你的Python代码 print("Hello from embedded Python!")
2. 修改C++代码
把打开文件的路径改成你的Python脚本路径,而不是argv[0]。下面是修正后的C++代码示例:
#include <Python.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { // 初始化Python解释器 Py_Initialize(); // 打开你的Python脚本文件(替换成实际路径) FILE *fp = fopen("./script.py", "r"); if (fp == nullptr) { cerr << "无法打开Python脚本文件" << endl; return 1; } // 执行Python脚本 PyRun_SimpleFile(fp, "./script.py"); // 关闭文件和Python解释器 fclose(fp); Py_Finalize(); return 0; }
3. 编译与运行
编译时要确保正确链接Python库,比如针对Python3.8,编译命令大概是:
g++ your_code.cpp -o cppPython -I/usr/include/python3.8 -lpython3.8
然后运行编译后的程序,就能正常执行嵌入的Python代码了。
额外小提示
如果只是简单的Python代码,也可以直接用PyRun_SimpleString执行字符串形式的代码,省去文件操作:
PyRun_SimpleString("print('Hello from embedded Python!')");
内容的提问来源于stack exchange,提问作者Abhishek Arya
相关产品推荐
相关产品推荐

