IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python命令行调取c++程序并写入文件 -> 正文阅读

[Python知识库]python命令行调取c++程序并写入文件

c++程序:

#include "cmdline.h"
#include <fstream>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
  cmdline::parser a;
  a.add<string>("name", 'h', "name to file", true);
  a.add<string>("outpath", '\0', "path for output", true);
  a.parse_check(argc, argv);

  std::ostringstream outPutPathBuffer;
  outPutPathBuffer << a.get<std::string>("outpath");
  std::string outPutPath = outPutPathBuffer.str();


  string name = a.get<string>("name");
  ofstream outfile;
  outfile.open(outPutPath);
  outfile << name << endl;
  return 0;
}

python调用的程序:

import subprocess


filepath = r'H:\cmake_test\build\CMakeProject1\CMakeProject1'
subprocess.run(filepath)

整个程序的思路是,python 命令行传入参数 name,输出文件的地址等
c++接收参数后快速运算,将结果写入规定的地址里

首先,对于C++程序而言,需要有一个接收命令行的 parser ,因此需要用到头文件 cmdline.h
如何使用该标准库可以参考我之前的一些文章
parser 接收到参数后将其写入文件,C++程序结束,返回代码 0
python 程序接收代码后正常结束

其中的难点是C++程序调用了一些库,杂七杂八,导致编译完,python不能调用
解决方案:在编译时加入 -static 参数即可。
参见1 2 3
动态库和静态库的区别4
cmake 实现动态库和静态库5

下面附上debug的艰辛历程:
最开始以为是 releasedebug 模式导致的问题…

我用了cmake,尝试了release版本和默认的debug版本,先是编译了官方自带的案例(有头文件)

使用Python调两个生成文件,均可正常输出。之后使用cmake编译了release版本,放到同学电脑上跑了一下还是报错

怀疑不是这个debug release的问题

使用subprocess库,使用ret接收run的结果

在Python的debug模式下发现run是completed,但是return code 是3221225785

搜索这个代码,发现解决办法是在编译过程中加一个参数 -static

加上,使用gcc编译,Python可以正常调用。使用cmake编译,默认debug版本和release均可调用

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:43:22  更:2021-12-23 15:43:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:52:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码