c++调用子进程捕获输出(windows,linux)
1、windows
在windows上使用API函数CreateProcessW函数或者winexe 来启动新的进程,执行cmd命令:
int execute(const TCHAR *childexe)
{ SECURITY_ATTRIBUTES sa = {0}; HANDLE hRead = NULL, hWrite = NULL; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hRead, &hWrite, &sa,0)) { return false; } HANDLE hTemp = GetStdHandle(STD_OUTPUT_HANDLE);SetStdHandle(STD_OUTPUT_HANDLE,hTemp);STARTUPINFO si = {0}; PROCESS_INFORMATION pi = {0}; si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWrite; si.hStdOutput = hWrite; si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; bRet = CreateProcess(NULL,childexe,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi);if (!bRet)) { CloseHandle(hWrite); CloseHandle(hRead); return false; } CloseHandle(hWrite);char ReadBuff[256] = {0};while(ReadFile(hRead,ReadBuff,256,&ReadNum,NULL)){ReadBuff[ReadNum] = '\0';cout << ReadBuff << "--" << ReadNum << endl;}cin.get();return 0;//WaitForSingleObject(pi.hProcess,INFINITE); //CloseHandle(pi.hProcess); //CloseHandle(pi.hThread); //CloseHandle(hWrite); //ReadFile(hRead, buffer, MAX_PATH_LENGTH, &bytesRead, NULL); //CloseHandle(hRead); }
2、linux
1 system函数可以运行命令行
2 popen打开一个命令行的管道
3 通过fgets获得该管道传输内容
在linux上运行的例子如下:
int g_stop = 0;
void execute(const char *cmd)
{ char buf_ps[1024]; char ps[1024]={0}; FILE *ptr; strcpy(ps, cmd); if((ptr=popen(ps, "r"))!=NULL) { while(fgets(buf_ps, 1024, ptr)!=NULL) { printf("%s\n",buf_ps);if(g_stop == 1)break;} pclose(ptr); ptr = NULL; } else { printf("popen %s error\n", ps); }
}
说明:
1、参数cmd为要执行的命令行,result为命令行运行结果。
2 、输入的cmd命令用… 2>&1 的形式,可以将标准错误读进来
c++调用子进程捕获输出(windows,linux)相关推荐
- python调用linux命令输出结果,Python-运行shell命令并捕获输出
小编典典 这个问题的答案取决于你使用的Python版本.最简单的方法是使用以下subprocess.check_output功能: >>> subprocess.check_outp ...
- 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件
转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...
- 运行shell命令并捕获输出
我想编写一个函数,该函数将执行shell命令并以字符串形式返回其输出,无论它是错误消息还是成功消息. 我只想获得与命令行相同的结果. 能做到这一点的代码示例是什么? 例如: def run_comma ...
- python执行shell命令查看输出_python 运行 shell 命令并捕获输出_python_酷徒编程知识库...
这个问题的答案取决于你使用的python 版本. 最简单的方法是使用 subprocess.check_output 函数:>>> subprocess.check_output([ ...
- FFmpeg音视频开发实战5 iOS/Android/windows/Linux -陈超-专题视频课程
FFmpeg音视频开发实战5 iOS/Android/windows/Linux -159618人已学习 课程介绍 咨询QQ: 347181469. 本课程适合中,从事音视频,网络通 ...
- Windows/Linux客户端挂载NFS共享存储
Windows/Linux客户端挂载NFS共享存储 1. Linux搭建NFS共享存储 1.1. NFS概述 1.2. 安装并配置NFS Server 1.3. 启动并验证NFS Server 2. ...
- Maven的安装文字版(Windows/Linux/Mac)
以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_environment_setup.html,安装信 ...
- linux语言windows 语言,作业系统一般用什么编码语言程式设计?如:Windows,Linux,是组合语言吗?还是自己开发的程式码?...
作业系统一般用什么编码语言程式设计?如:Windows,Linux,是组合语言吗?还是自己开发的程式码?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内 ...
- linux下java调用python脚本,java - 在Linux Terminal中以编程方式从Java调用python脚本 - 堆栈内存溢出...
我正在开发一个Java应用程序,用于检查源文件中的补丁程序(是否存在). 用于检测补丁程序更改的核心逻辑位于python脚本[titled'patch.py']中,并且我的Java应用程序与此Py ...
最新文章
- Qt Style Sheet 翻译(中)--类似css
- org.springframework.http.converter.HttpMessageNotReadableException: Required request body is(亲测)
- Android面试最新总结
- LINUX下PHP安装VLD扩展并测试OK
- kafka原理_kafka入门(原理搭建简单使用)
- vue数据定义格式_用好单元格自定义格式,让Excel按照你的要求显示数据
- 网络拓扑图画图工具_一款功能强大的免费在线作图工具
- Microsoft Excel 教程:如何在 Excel 中创建自定义数字格式?
- DP动态规划思想讲解
- apex显示服务器连接超时,apex与服务器链接超时
- oracle dataguard 日志传输,从alert日志看Oracle 11g DataGuard日志传输
- nagios 总结_caci 与 nagios 一些总结 【一】
- 阿里云国际版忘记会员名或登录密码,怎么办?
- R平方值python实现
- 如何学习linux系统
- 解决雷电模拟器在windows 10下无法桥接网卡的问题
- 特征方程求数列的通项公式(二阶线性递推式)
- 如何提高App的下载量
- ESP-WHO(一)ESP32 摄像头驱动分析
- 360随身wifi产品分析