linux 接收文件+调用python脚本
来源:互联网 发布:mac 升级后切换花屏 编辑:程序博客网 时间:2024/05/20 23:59
继续接着上一篇socket传送消息的程序。今天实现了从windows接收kinect截图然后利用socket发送到linux。发图片到linux主要是因为这上面有个GPU可以用来跑caffe的深度学习网络,然后把分析结果再发回windows的程序。
接收图片
对应于之前windows端的发送代码,在qt程序中加了一段接收图片的代码是这样的:
char buffer[MAX_MSG_SIZE];/* 缓冲区*/ FILE *stream; unsigned long long file_size=0; int res; if((res=recv(cli_sockfd,(char *)&file_size,sizeof(unsigned long long)+1,0))==-1) //接受数据 { emit sendData("失去连接"); return; }else{ // unsigned short maxvalue=file_size; qDebug()<<file_size; stream = fopen("../images/cut.png","w"); DWORD dwNumberofBytesRecv=0; DWORD dwCountofBytesRecv=0; memset(buffer,0,MAX_MSG_SIZE); do{ dwNumberofBytesRecv=recv(cli_sockfd,buffer,sizeof(buffer),0); fwrite(buffer,sizeof(char),dwNumberofBytesRecv,stream); //按字节写入图片 dwCountofBytesRecv+=dwNumberofBytesRecv; }while(file_size-dwCountofBytesRecv); emit sendData("文件接收成功"); fclose(stream);
仍然是先接收到文件的总大小,然后根据图片大小接收图片。这其中的这一段是比较重要的写入文件操作。
fwrite(buffer,sizeof(char),dwNumberofBytesRecv,stream);
调用python脚本
这一段是比较纠结的,之前我在VS里面调用过python程序,就是调用模块乱七八糟的,很复杂,一不小心就找不到模块,然后还经常加载不了其他路径上的库文件,而且像caffe,faster rcnn这种又需要依赖大量的库,调了半个早上实在是心累,遂决定用简单粗暴的方法就是:
直接在qt里面调用shell执行python程序,就是酱:QProcess::execute(“python democy.py”);
哈哈,爽飞了有没有!在python程序中写一段代码把结果写入txt文件,然后调用完程序直接读txt文件,把结果取出来,就可以避免乌七八糟地调python,但是这样做的坏处是,每次都得初始化caffe网络,就有点慢了,下次还是钻研下怎么搞。调用完后直接读结果然后用socket发出去:
QProcess::execute("python democy.py"); QFile f("cut.txt"); if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Open failed." ; } QTextStream txtInput(&f); QString lineStr; while(!txtInput.atEnd()) { lineStr = txtInput.readLine(); emit sendData(lineStr); } char msg[MAX_MSG_SIZE];/* 缓冲区*/ QString flag="sendResult"; QByteArray ba = flag.toLatin1(); char *mm = ba.data(); strcpy(msg,mm); //发送结果标志位 if(send(cli_sockfd,msg,sizeof(msg),0)==-1){ /*发送数据*/ emit sendData("发送失败"); }else{ memset(msg,0,MAX_MSG_SIZE); emit sendData("准备发送计算结果"); } //发送结果 ba = lineStr.toLatin1(); mm = ba.data(); strcpy(msg,mm); if(send(cli_sockfd,msg,sizeof(msg),0)==-1){ /*发送数据*/ emit sendData("发送失败"); }else{ memset(msg,0,MAX_MSG_SIZE); emit sendData("已经发送计算结果"); } f.close();
windows接收程序
windows端主要是对应写一个接收结果字符串,然后把它分割再取出写入文本框程序。
阅读全文
0 0
- linux 接收文件+调用python脚本
- 【Linux】Linux下调用Python程序脚本
- PHP文件中调用Python脚本
- java调用python脚本文件大盘点
- matlab调用Python的.py脚本文件
- 用脚本C调用Python脚本文件里的函数
- C调用Python脚本文件里的函数(转)
- C调用Python脚本文件里的函数
- C调用Python脚本文件里的函数
- C调用Python脚本文件里的函数
- C调用Python脚本文件里的函数
- C调用Python脚本文件里的函数
- C/C++中调用执行python脚本文件
- Python 调用shell脚本
- python调用Shell脚本
- python调用Shell脚本
- python调用shell脚本
- c++调用python脚本
- 有关switch
- 遍历 ArrayList
- 文章标题
- linux 信号机制笔记
- 极差(贪心)
- linux 接收文件+调用python脚本
- NYOJ033蛇形填数
- Tasks、 activity 及 activity stack
- SVN使用简介
- react_native 项目实战 (5) DeviceEventEmitter 使用 ,webview 使用 react navigation进行参数传递
- 线性表
- 前端工作中的两点优化
- Android面试题汇总
- <详解>C语言实现程序跳转到绝对地址0x100000处执行