c++调用python脚本

引言:之前做c++作业时遇到了一个棘手的问题,就是去除文件中相同的元素,由于文件很大,这个功能用c++实现起来就比较复杂,就想到用python实现,但由于学术不精,只能利用c++程序调动cmd运行python程序

一、引入头文件

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<iostream>

using namespace std;

二、函数实现

void Python()
{
	char result[100];
	FILE *fp;
	string cmd = "python test.py"; //字符串类型变量,赋值为要cmd执行的命令	
	/*c_str()方法实现字符串在cmd命令行的输入
	_popen()函数以只读方式获取命令行返回结果*/
	fp = _popen(cmd.c_str(),"r");
	
	if(fp == NULL)
	{
		cout << "ERROR"  << endl;
		exit(1); 
	}
	/*fgets(result,sizeof(result)-1,fp)从命令行读取一行信息写入result中*/
	while(fgets(result,sizeof(result)-1,fp)!=NULL)
	{
		cout << result;
	}
	
	_pclose(fp); //关闭命令行窗口
}

三、用于测试的python文件test.py


print("") 
'''该处输出为空,则程序显示error
可通过try-except方式,脚本异常输出空与c++程序传递信息'''
    

四、python实现文本元素去重复

filename1 = "idword1.txt"
filename2 = "idword2.txt"

seqars = []

with open(filename1) as file_object:
    for line in file_object :
    '''按行读取文件内容,装入seqars列表'''
        seqars.append(line)

'''利用set()函数将列表转化为集合,去除重复元素
   再用list函数将集合转化为列表'''
seq = list(set(seqars))

with open(filename2,'w') as file_object2:
    
    for word in seq:
    '''按行写入文档'''
        file_object2.write(word)

print("")
    
### 如何在C++调用Python脚本 要在C++程序调用Python脚本,可以通过多种方法实现。以下是几种常见的技术及其对应的示例代码。 #### 方法一:使用Boost.Python库 通过安装并配置`Boost.Python`库,可以在C++中轻松调用Python脚本。以下是一个简单的例子: ```cpp #include <boost/python.hpp> int main() { // 初始化 Python 环境 Py_Initialize(); try { // 导入 Python 脚本 boost::python::object script = boost::python::import("script"); // 调用 Python 中的函数 script.attr("some_function")(); } catch (boost::python::error_already_set const&) { PyErr_Print(); } // 结束 Python 环境 Py_Finalize(); return 0; } ``` 这种方法依赖于`Boost.Python`库的支持[^1]。 --- #### 方法二:直接使用Python嵌入API 如果不想引入额外的第三方库,可以直接利用Python提供的嵌入API来完成任务。以下是一段示例代码: ```cpp #include <Python.h> #include <iostream> int main() { // 初始化 Python 解释器 Py_Initialize(); // 添加当前目录到 Python 的模块搜索路径 PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); // 加载 Python 模块 PyObject* pModule = PyImport_ImportModule("mytest"); // 替换为实际的 Python 文件名(不带.py扩展) if (!pModule) { std::cerr << "Failed to load the module." << std::endl; return -1; } // 获取指定的函数对象 PyObject* pFunc = PyObject_GetAttrString(pModule, "function_name"); // 替换为实际的函数名 if (!pFunc || !PyCallable_Check(pFunc)) { std::cerr << "Cannot find function 'function_name' in the module." << std::endl; Py_DECREF(pModule); return -1; } // 调用函数(无参数情况) PyObject_CallObject(pFunc, nullptr); // 清理资源 Py_XDECREF(pFunc); Py_DECREF(pModule); // 关闭 Python 解释器 Py_Finalize(); return 0; } ``` 这段代码展示了如何加载一个名为`mytest`的Python模块,并调用其中的一个函数[^4]。 --- #### 方法三:基于Qt框架的方式 如果你正在使用Qt框架开发应用程序,则可以借助其功能设置自定义的Python环境。具体操作包括复制所需的Python环境文件以及调整代码逻辑。例如,在模板项目中创建特定目录并将必要文件放置于此处以便正确初始化解释器[^3]。 注意此方案适用于已经集成Qt工具链的情况;对于纯命令行应用可能并不适用。 --- ### 总结 以上三种方式分别适合不同的场景需求——从轻量级的标准接口到强大的跨语言绑定支持都有涉及。开发者可以根据项目的具体情况选择最适合的技术路线实施解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐先生没洗头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值